簡體   English   中英

使用node-forge進行加密,並使用python和RSA-OAEP進行解密

[英]Encrypting using node-forge and decrypting using python with RSA-OAEP

我有以下代碼要用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中存在的密鑰對某些文本字符串進行加密和解密,則可以正常工作。

如何在偽造中進行加密並在python中進行解密?

pyCrypto默認使用SHA1進行哈希處理和使用MGF1。 如果將SHA-256傳遞給哈希,它也將用於MGF1( 代碼參考 )。 因此,您需要專門將哈希設置為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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM