我一直在尝试用Python和RSA在pycrypto中加密数据。我尝试遵循这里的说明:http://www.laurentluce.com/posts/python-and-cryptography-with-pycrypto/,但当我调用enc_data = public_key.encrypt('abcdefgh', 32)
时,结果如下所示
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
enc_data = public_key.encrypt('abcdefgh', 32)
File "C:\Python35\lib\site-packages\Crypto\PublicKey\RSA.py", line 150, in encrypt
return pubkey.pubkey.encrypt(self, plaintext, K)
File "C:\Python35\lib\site-packages\Crypto\PublicKey\pubkey.py", line 75, in encrypt
ciphertext=self._encrypt(plaintext, K)
File "C:\Python35\lib\site-packages\Crypto\PublicKey\RSA.py", line 224, in _encrypt
return (self.key._encrypt(c),)
File "C:\Python35\lib\site-packages\Crypto\PublicKey\_slowmath.py", line 65, in _encrypt
return pow(m, self.e, self.n)
TypeError: unsupported operand type(s) for pow(): 'str', 'int', 'int'
提前感谢您对此问题的任何建议。
发布于 2016-03-13 06:47:51
如果您查看encrypt
方法:
plaintext
(字节、字符串或长)-要使用RSA加密的数据段。它在数值上不能大于RSA模数(n)。
您的数据不是字节字符串或长数据。如果您想输入文本,那么首先需要使用UTF-8这样的字符编码进行输入。
请注意,“明文”只是加密原语的输入。所有现代密码都是基于字节进行操作的。从历史上看,输入可能是实际的文本,但现在不是了。
另请注意:
注意:此函数执行简单、原始的RSA (教科书)。在实际应用中,您始终需要使用适当的加密填充,并且不应使用此方法直接加密数据。如果不这样做,可能会导致安全漏洞。建议使用
Crypto.Cipher.PKCS1_OAEP
或Crypto.Cipher.PKCS1_v1_5
模块。
对于这些函数,还需要将文本转换为字节数组。
https://stackoverflow.com/questions/35963916
复制相似问题