使用 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"
我使用
导出了 public 和私钥
forge.pki.privateKeyToPem(keypair.privateKey) // stored in pv.key
forge.pki.publicKeyToPem(keypair.publicKey) // stored in pb.key
我使用
导出加密文本
ciphertext_base64 = forge.util.encode64(ciphertext)
我正在尝试使用加密库在 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.
>>>
如果我使用 pv.key 和 pb.key 中 python 中存在的密钥加密和解密一些文本字符串,它工作正常。
如何在 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 中加密以下代码:
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"
我使用
导出了 public 和私钥forge.pki.privateKeyToPem(keypair.privateKey) // stored in pv.key
forge.pki.publicKeyToPem(keypair.publicKey) // stored in pb.key
我使用
导出加密文本ciphertext_base64 = forge.util.encode64(ciphertext)
我正在尝试使用加密库在 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.
>>>
如果我使用 pv.key 和 pb.key 中 python 中存在的密钥加密和解密一些文本字符串,它工作正常。
如何在 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))