为什么我不能使用RSASSA-PKCS1-v1_5进行加密/解密?

8 浏览
0 Comments

为什么我不能使用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上也没有解释。

如果我的英语表达不太好,对不起。

0