javascript - 使用 node-forge 加密并使用 python 和 RSA-OAEP 解密

标签 javascript python node.js rsa public-key-encryption

我有以下代码要在 Javascript 中加密:

var rsa = forge.pki.rsa;

var keypair = rsa.generateKeyPair({bits: 2048, e: 0x10001});

var ciphertext = keypair.publicKey.encrypt("zz xx yy", 'RSA-OAEP', {
  md: forge.md.sha256.create(),
  mgf1: {
    md: forge.md.sha1.create()
  }
});

keypair.privateKey.decrypt(ciphertext, 'RSA-OAEP', {
  md: forge.md.sha256.create(),
  mgf1: {
    md: forge.md.sha1.create()
  }
});
"zz xx yy"

我使用导出公钥和私钥

forge.pki.privateKeyToPem(keypair.privateKey) // stored in pv.key
forge.pki.publicKeyToPem(keypair.publicKey) // stored in pb.key

我使用导出加密文本

ciphertext_base64 = forge.util.encode64(ciphertext)

我尝试使用 Crypto 库在 python 中解密它,如下所示,但出现错误:

>>> key = RSA.importKey(open('pv.key').read())
>>> cipher = PKCS1_OAEP.new(key)
>>> import base64
>>> ciphertext = base64.b64decode(ciphertext_base64)
>>> cipher.decrypt(ciphertext)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/Crypto/Cipher/PKCS1_OAEP.py", line 227, in decrypt
    raise ValueError("Incorrect decryption.")
ValueError: Incorrect decryption.
>>> 

如果我使用 python 中的 pv.key 和 pb.key 中存在的 key 加密和解密一些文本字符串,它工作正常。

如何在 forge 中加密并在 python 中解密?

最佳答案

pyCrypto 默认使用 SHA1 进行散列和 MGF1。如果您传入 SHA-256 进行哈希处理,它也会将其用于 MGF1 ( code reference )。因此,您需要专门将哈希设置为 SHA-256,将 MGF1 设置为 SHA-1:

cipher = PKCS1_OAEP.new(key, Crypto.Hash.SHA256, \
        lambda x,y: Crypto.Signature.PKCS1_PSS.MGF1(x,y, Crypto.Hash.SHA1))

关于javascript - 使用 node-forge 加密并使用 python 和 RSA-OAEP 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35544547/

相关文章:

javascript - 客户关系管理 2013 : Force refresh a form after save

python - 使用 pyexcelerate 的 Dataframe 打印索引

python - 如何阻止python将信号传播到子进程?

node.js - 用于查询子实体的node-restful GET查询字符串

javascript - 将 z-index 设置为传单中的图层控件

javascript - 为访问者清除 X-CSRF-TOKEN 以修复 XMLHttpRequest 被 CORS 策略阻止的问题

node.js - 模块构建失败 : ReferenceError: [BABEL] Unknown option:/Users/Will/. babelrc.presets

javascript - Mongoose 保存嵌套的对象数组 - Node.js

javascript - Node.js 全局 eval,抛出 ReferenceError

python - pytorch中动态添加隐藏单元