首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法解密使用PyCryptodome加密的SubtleCrypto PyCryptodome的RSA-OAEP消息

无法解密使用PyCryptodome加密的SubtleCrypto PyCryptodome的RSA-OAEP消息
EN

Stack Overflow用户
提问于 2020-08-26 10:48:51
回答 1查看 901关注 0票数 3

在服务器端,我使用PyCryptodomeRSA-OAEP (使用SHA-256)加密消息。

我试图在客户端使用SubtleCrypto Web解密消息,但是它给了我一个DOMException错误,没有进一步的细节。

在SubtleCrypto上,我可以导入在PyCryptodome中生成的私钥,没有问题,但是当我试图解密消息时,它会给出错误。

我还尝试导入客户端在PyCryptodome上生成的公钥,以便用SubtleCrypto加密相同的消息。在这种情况下,我可以毫无问题地解密它,使用与以前相同的流。

这两个库之间的RSA-OAEP算法不兼容吗?我注意到PyCryptodome在各自的文档中引用了RFC 8017(v2.2)和SubtleCrypto RFC 3447(v2.1)

编辑

  • 服务器端代码(pycryptodome==3.9.8): 从Crypto.PublicKey导入RSA从Crypto.Cipher导入PKCS1_OAEP类密码: def rsa_encrypt(self,data,key_string):key = RSA.importKey(key_string) rsa_encryption_cipher = PKCS1_OAEP.new(key)密文=rsa_encryption_cipher.encrypt(数据)返回data 64.b64encode(密文) def rsa_decrypt(self,data,key_string):data =data 64.b64decode(Data) key = RSA.importKey(key_string) rsa_decryption_cipher = PKCS1_OAEP.new(key)明文= rsa_decryption_cipher.decrypt(data)返回明文(.)
  • 客户端代码 私有decryptRSAString (encryptedText: string,privateKey: string):可观察的{返回Observable.create ((观察者:任何) => { let keyBuffer: ArrayBuffer = this.str2ab(window.atob(privateKey));让encryptedTextBuffer: ArrayBuffer = this.str2ab(window.atob(encryptedText));让algorithmParams: RsaHashedImportParams ={ name:“RSA”,散列:"SHA-256“};window.crypto.subtle.importKey(‘pkcs8 8’,keyBuffer,algorithmParams,true,“解密”).then (cryptoKey: CryptoKey) => { window.crypto.subtle.decrypt( { name:"RSA-OAEP“} ),cryptoKey,( encryptedTextBuffer ).then ( (decryptedMessage: ArrayBuffer) => { observer.next (decryptedMessage);observer.complete();},(错误: any) => { observer.error (错误)} },(错误: any) => { observer.error (错误)};});}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-26 13:27:58

PyCryptodome 不使用作为OAEP的默认摘要,而是将SHA-1、这里作为默认摘要。因此,必须在WebCrypto端使用SHA-1:

代码语言:javascript
复制
let algorithmParams: RsaHashedImportParams = {
    name: "RSA-OAEP",
    hash: "SHA-1"
};

当然,您也可以在PyCryptodome端应用SHA-256,然后在WebCrypto端不需要进行任何更改。

代码语言:javascript
复制
from Crypto.Hash import SHA256
...
rsa_encryption_cipher = PKCS1_OAEP.new(key, SHA256) # default: Crypto.Hash.SHA1

有了双方一致的摘要,我就可以用您的WebCrypto代码成功地解密一个密文,这是我以前用您的PyCryptodome代码生成的(使用我自己的密钥)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63595996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档