为什么我不能使用RSASSA-PKCS1-v1_5进行加密/解密?
为什么我不能使用RSASSA-PKCS1-v1_5进行加密/解密?
首先,我对密码学完全不了解,只有一些关于一些加密算法如RSA、DES等的基础知识。
我想使用JS中的SubtleCrypto来进行一些操作,包括使用RSA进行签名、验证、加密、解密
等。
我只是无法生成一个可用于执行所有操作的密钥对;例如,下面的代码可以成功生成用于签名/验证的密钥对:
let keyPair = window.crypto.subtle.generateKey( { name: "RSASSA-PKCS1-v1_5", modulusLength: 4096, publicExponent: new Uint8Array([1, 0, 1]), hash: "SHA-512" }, true, ['sign', 'verify'] ); keyPair.then((value)=>{ console.log("工作正常。"); }) .catch((error)=>{console.log("错误:", error)})
但是,当我使用上面的代码生成用于加密/解密的密钥对时,我会在浏览器中得到一个DOMException或者在代码片段中得到一个SyntaxError:
let keyPair = window.crypto.subtle.generateKey( { name: "RSASSA-PKCS1-v1_5", modulusLength: 4096, publicExponent: new Uint8Array([1, 0, 1]), hash: "SHA-512" }, true, ['encrypt', 'decrypt'] ); keyPair.then((value)=>{ console.log("工作正常。"); }) .catch((error)=>{console.log("错误:", error)})
注意:我发现RSA-OAEP的行为完全不同,它可以用于加密/解密,但无法用于签名/验证,并显示相同的错误。
问题:你能提供一个解释这些RSA变体之间差异以及何时使用它们的链接吗?我在谷歌上搜索了一下,但没有找到任何相关的信息,而且在MDN上也没有解释。
如果我的英语表达不太好,对不起。