无法在python中使用OAEP解密

无法在python中使用OAEP解密,python,encryption,rsa,python-3.8,oaep,Python,Encryption,Rsa,Python 3.8,Oaep,这是我的密码: from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP from Crypto import Random from Crypto import Hash import base64 key = RSA.import_key("""-----BEGIN PRIVATE KEY----- MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6

这是我的密码:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto import Random
from Crypto import Hash
import base64

key = RSA.import_key("""-----BEGIN PRIVATE KEY-----
MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqPfgaTEWEP3S9w0t
gsicURfo+nLW09/0KfOPinhYZ4ouzU+3xC4pSlEp8Ut9FgL0AgqNslNaK34Kq+NZ
jO9DAQIDAQABAkAgkuLEHLaqkWhLgNKagSajeobLS3rPT0Agm0f7k55FXVt743hw
Ngkp98bMNrzy9AQ1mJGbQZGrpr4c8ZAx3aRNAiEAoxK/MgGeeLui385KJ7ZOYktj
hLBNAB69fKwTZFsUNh0CIQEJQRpFCcydunv2bENcN/oBTRw39E8GNv2pIcNxZkcb
NQIgbYSzn3Py6AasNj6nEtCfB+i1p3F35TK/87DlPSrmAgkCIQDJLhFoj1gbwRbH
/bDRPrtlRUDDx44wHoEhSDRdy77eiQIgE6z/k6I+ChN1LLttwX0galITxmAYrOBh
BVl433tgTTQ=
-----END PRIVATE KEY-----""")

ciphertext = "h3j3zLT2jXCaZuwF7cgUE/Zmc/5IsIfKbaTiBhpCJo86AiyuoA3Yvni+Lrm5wu2OGv2h5R7Zu3voFcHugiystw=="

ciphertextBytes = base64.decodebytes(ciphertext.encode('ascii'))

cipher = PKCS1_OAEP.new(key, Hash.MD5, Hash.SHA1)
plaintext = cipher.decrypt(ciphertextBytes)

print(plaintext)
下面是我得到的错误:

Traceback (most recent call last):
  File "test.py", line 23, in <module>
    plaintext = cipher.decrypt(ciphertextBytes)
  File "C:\Users\neubert\AppData\Local\Programs\Python\Python38\lib\site-packages\Crypto\Cipher\PKCS1_OAEP.py", line 183, in decrypt
    seedMask = self._mgf(maskedDB, hLen)
TypeError: 'module' object is not callable
回溯(最近一次呼叫最后一次):
文件“test.py”,第23行,在
明文=密码.解密(密文字节)
文件“C:\Users\neubert\AppData\Local\Programs\Python\Python38\lib\site packages\Crypto\Cipher\PKCS1\u OAEP.py”,第183行,在decrypt中
seedMask=self.\u mgf(maskedDB,hLen)
TypeError:“模块”对象不可调用

我做错了什么?我正在运行Python 3.8.3。

发布的代码中错误地指定了掩码生成函数的
mgfunc
参数(第三个参数)。根据以下描述:

mgfunc(可调用)–一个掩码生成函数,它接受两个参数:用作种子的字符串和要生成的掩码的长度(以字节为单位)。如果未指定,则使用与hashAlgo一致的标准MGF1(安全选择)

其中,
hashAlgo
(第二个参数)表示OAEP摘要

Crypto.Signature.pss
上下文中的文档中描述了MGF1与明确指定摘要的使用,请参阅和。但是,MGF1也可以在
Crypto.Cipher.PKCS1_OAEP
中找到(从中的
Crypto.Signature.pss
导入)

由于默认情况下,MGF1与第2个参数(
hashAlgo
)中指定的OAEP摘要一起使用,因此每当两个摘要不同时,都需要明确指定掩码生成函数或MGF1,即,如本例所示,其中OAEP摘要为MD5,MGF1摘要为SHA1

如果代码中使用了以下行:

cipher = PKCS1_OAEP.new(key, Hash.MD5, mgfunc = lambda x,y: PKCS1_OAEP.MGF1(x, y, Hash.SHA1))
然后解密工作,返回b'test'作为解密值


请注意,和已弃用。对于RSAES-OAEP,建议仅使用SHA-1和SHA-2。

512位密钥(如我使用的密钥)也不推荐使用。lol。您可以加密的明文的最大长度不仅受模的大小限制,而且还受哈希的大小限制,PKCS v1.5不考虑这一点,因为它没有哈希。为了简洁起见,我正在做512位键。最佳实践2048位密钥将在示例代码中占用4倍的空间,我不希望示例代码过大!无论如何,我想你可能回答了我的问题-我回家后会测试-谢谢!