我一直在尝试使用pycrypto中的RSA加密Python中的数据。我已尝试按照此处的说明操作: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'
提前感谢有关此问题的任何建议。
答案 0 :(得分:1)
如果你看一下encrypt
方法:
plaintext
(字节字符串或长整数) - 要使用RSA加密的数据。它可能不会在数值上大于RSA模块(n)。
您的数据不是字节字符串或长整数。如果要输入文本,则首先需要使用UTF-8等字符编码作为输入。
请注意,“明文”只是加密基元的输入。所有现代密码都以字节为单位运行。从历史上看,输入可能是实际文本,但现在不再是。
另请注意:
注意:此函数执行简单的原始RSA加密(教科书)。在实际应用程序中,您始终需要使用正确的加密填充,并且不应使用此方法直接加密数据。如果不这样做可能会导致安全漏洞。建议使用模块
Crypto.Cipher.PKCS1_OAEP
或Crypto.Cipher.PKCS1_v1_5
代替。
对于这些函数,还需要将文本转换为字节数组。