【问题标题】:Crypto module of HTML5 to RSA public encryptHTML5 到 RSA 公开加密的加密模块
【发布时间】:2019-12-30 16:23:58
【问题描述】:

如何使用公钥和 PKCS 填充使用 RSA 进行加密,我一直在尝试这样做并且一直在导入密钥,到目前为止我有这个:

crypto.subtle.importKey('spki', key, {name: 'RSASSA-PKCS1-v1_5', hash: {name: 'SHA-256'}}, false, ['encrypt']).then(i => console.log(i)).catch(err => console.warn(err.message))

key 是一个密钥,当然,使用TextEncoder 编码。这给了我一个错误Cannot create a key using the specified key usages

我为 AES-CBC 进行了导入和成功的加密/解密,并希望为 RSA 做同样的事情,我们将不胜感激。

P.S.我试图不为此使用库,所以这应该是最后的选择。

【问题讨论】:

    标签: javascript html encryption cryptography rsa


    【解决方案1】:

    “RSASSA-PKCS1-v1_5”中的“SSA”代表“Signature Scheme with Annex”,是一种签名算法,不能与“encrypt”密钥一起使用。

    带有 PKCS#1 填充的 RSA 加密算法将是“RSAES-PKCS1-v1_5”,但根据 https://www.chromium.org/blink/webcrypto 不支持它(“Chrome 在默认启用 Web Crypto 之前的早期支持此功能,但此后已放弃支持。”)。以下是有关为什么不支持它的更多信息:https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-webcrypto-algorithms-00#section-5

    对于 WebCrypto 中的 RSA 加密,似乎唯一支持的填充是 RSA-OAEP。

    【讨论】:

    • 我现在尝试先使用 RSA-OAEP 导入密钥,但我得到了DOMException,我的代码是crypto.subtle.importKey('spki', key, {name: 'RSA-OAEP', hash: {name: 'SHA-256'}}, false, ['encrypt']).then(i => console.log(i)).catch(err => console.warn(err.name, err.code, err.message)),你能帮我弄清楚这里做错了什么吗?密钥已使用TextEncoder 编码
    • 我设法弄清楚了,显然,我应该对公钥的主体部分进行 base64 解码并将结果转换为 uint8array 然后在导入函数中使用它
    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 2018-06-07
    • 2014-06-23
    • 2011-06-18
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    相关资源
    最近更新 更多