为什么我无法使用RSASSA-PKCS1-v1_5来加密/解密?

问题描述 投票:0回答:3

首先,我对密码学完全陌生,我只是对一些加密算法及其工作原理有基本了解,例如 RSA、DES 等。

我想在 JS 中使用 SubtleCrypto 来做一些事情,包括

signing, verifying, encrypting, decrypting
使用 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("worked properly.");
  })
  .catch((error)=>{console.log("Error:", 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("worked properly.");
  })
  .catch((error)=>{console.log("Error:", error)})

注意:我发现 RSA-OAEP 的行为完全不同,我的意思是它可以用于加密/解密,但在签名/验证时卡住并显示相同的错误。

问题: 您能否提供一个链接来解释这些 RSA 变体之间的差异以及我何时应该使用其中的哪一个?我用谷歌搜索了它,但我找不到任何东西,并且MDN

中没有任何解释

抱歉,如果我的英语不是很好。

javascript cryptography rsa cryptoapi
3个回答
0
投票

回答这个问题是:

问题:您能给我一个解释的链接吗? 这些 RSA 变体之间的差异以及何时应该使用哪一个 其中?

您可以参考此文档,在支持的算法部分的底部,您可以找到一个表格,其中为您提供有关哪种算法适合哪种操作的完整指导。

相同的算法无法用于所有操作,因为正如问题下方的@Topaco评论,它们使用不同的填充变体等等:

加密/解密和签名/验证使用不同的填充 变体。这在RFC8017中进行了解释。加密/解密适用 较旧的 RSAES-PKCS1-v1_5 和更现代的 RSAES-OAEP。这 签名/验证上下文中的相应对应项是 RSASSA-PKCS1-v1_5 和 RSASSA-PSS。 WebCrypto API 不使用 自 2014 年起不再使用 RSAES-PKCS1-v1_5,请参阅此处


0
投票

现在使用这些算法似乎对解密来说有点不安全。

但是,如果您仍在寻找使用 RSASSA-PKCS1-v1_5 进行加密/解密的方法,请查看 https://www.npmjs.com/package/jsencrypt

更新:尚未证明使用RSASSA-PKCS1-v1_5不安全,但仍然不推荐。


0
投票

Bonjour j'ai 文章解密并使用消息,mais ça Marche pas 。 Quelqu'un pourrait m'aider? 语音代码: 静态无效 Handshaking_EncryptBMB(void) {

error_t errorsal2;
//______________
// Initialize RSA public and private keys memory
rsaInitPublicKey(&Public_Key_32sal2);
rsaInitPrivateKey(&privateKey_XXsal2);



memcpy(&privateKey_XXsal2, &inputs, sizeof(inputs));
//___________
// Public_Key_32sal2.

size_t ciphertextLesn=sizeof(ciphertexts);
size_t messageLens;
size_t messageSizes=sizeof(messagedechifred);


errorsal2= rsaesPkcs1v15Decrypt(&privateKey_XXsal2,ciphertexts,sizeof(ciphertexts), messagedechifred, sizeof(messagedechifred), &messageLens);

if (errorsal2)
{
    erreurKo();
}
//Release RSA private key
rsaFreePrivateKey(&privateKey_XXsal2);

}

© www.soinside.com 2019 - 2024. All rights reserved.