首先,我对密码学完全陌生,我只是对一些加密算法及其工作原理有基本了解,例如 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
中没有任何解释抱歉,如果我的英语不是很好。
回答这个问题是:
问题:您能给我一个解释的链接吗? 这些 RSA 变体之间的差异以及何时应该使用哪一个 其中?
您可以参考此文档,在支持的算法部分的底部,您可以找到一个表格,其中为您提供有关哪种算法适合哪种操作的完整指导。
相同的算法无法用于所有操作,因为正如问题下方的@Topaco评论,它们使用不同的填充变体等等:
加密/解密和签名/验证使用不同的填充 变体。这在RFC8017中进行了解释。加密/解密适用 较旧的 RSAES-PKCS1-v1_5 和更现代的 RSAES-OAEP。这 签名/验证上下文中的相应对应项是 RSASSA-PKCS1-v1_5 和 RSASSA-PSS。 WebCrypto API 不使用 自 2014 年起不再使用 RSAES-PKCS1-v1_5,请参阅此处。
现在使用这些算法似乎对解密来说有点不安全。
但是,如果您仍在寻找使用 RSASSA-PKCS1-v1_5 进行加密/解密的方法,请查看 https://www.npmjs.com/package/jsencrypt
更新:尚未证明使用RSASSA-PKCS1-v1_5不安全,但仍然不推荐。
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);
}