如何使用pycrypto和RSA加密(和解密)数据?

时间:2016-03-12 22:07:42

标签: python-3.x encryption rsa pycrypto

我一直在尝试使用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'

提前感谢有关此问题的任何建议。

1 个答案:

答案 0 :(得分:1)

如果你看一下encrypt方法:

  

plaintext(字节字符串或长整数) - 要使用RSA加密的数据。它可能不会在数值上大于RSA模块(n)。

您的数据不是字节字符串或长整数。如果要输入文本,则首先需要使用UTF-8等字符编码作为输入。

请注意,“明文”只是加密基元的输入。所有现代密码都以字节为单位运行。从历史上看,输入可能是实际文本,但现在不再是。

另请注意:

  

注意:此函数执行简单的原始RSA加密(教科书)。在实际应用程序中,您始终需要使用正确的加密填充,并且不应使用此方法直接加密数据。如果不这样做可能会导致安全漏洞。建议使用模块Crypto.Cipher.PKCS1_OAEPCrypto.Cipher.PKCS1_v1_5代替。

对于这些函数,还需要将文本转换为字节数组。