Python 3.x 如何使用pycrypto和RSA加密(和解密)数据?

Python 3.x 如何使用pycrypto和RSA加密(和解密)数据?,python-3.x,encryption,rsa,pycrypto,Python 3.x,Encryption,Rsa,Pycrypto,我一直在尝试用Python加密数据,用pycrypto加密RSA。我试着按照这里的说明进行操作:但当我调用enc\u data=public\u key.encrypt('abcdefgh',32)时,结果如下: 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 enc_data=public_key.encrypt('abcdefgh',32) 文件“C:\Python35\lib\site packages\Crypto\PublicKey\RSA.py”,第150行,加密 返回pubk

我一直在尝试用Python加密数据,用pycrypto加密RSA。我试着按照这里的说明进行操作:但当我调用
enc\u data=public\u key.encrypt('abcdefgh',32)
时,结果如下:

回溯(最近一次呼叫最后一次):
文件“”,第1行,在
enc_data=public_key.encrypt('abcdefgh',32)
文件“C:\Python35\lib\site packages\Crypto\PublicKey\RSA.py”,第150行,加密
返回pubkey.pubkey.encrypt(self、明文、K)
文件“C:\Python35\lib\site packages\Crypto\PublicKey\pubkey.py”,第75行,加密
密文=self.\u加密(明文,K)
文件“C:\Python35\lib\site packages\Crypto\PublicKey\RSA.py”,第224行,在\u encrypt中
返回(self.key.\u encrypt(c),)
文件“C:\Python35\lib\site packages\Crypto\PublicKey\\u slowmath.py”,第65行,在加密中
返回功率(m,self.e,self.n)
TypeError:pow()的操作数类型不受支持:“str”、“int”、“int”

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

如果您查看
加密方法:

纯文本
(字节字符串或长)-要用RSA加密的数据段。其数值不得大于RSA模块(n)

您的数据不是字节字符串或长数据。如果您想输入文本,那么首先需要使用字符编码,如UTF-8进行输入

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


还请注意:

注意:此函数执行简单的原始RSA加密(教科书)。在实际应用程序中,始终需要使用适当的加密填充,并且不应使用此方法直接加密数据。否则可能会导致安全漏洞。建议使用模块
Crypto.Cipher.PKCS1\u OAEP
Crypto.Cipher.PKCS1\u v1\u 5


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

为什么要使用RSA加密数据?请不要使用教科书(未添加的)RSA,因为它非常不安全。请看一看。PKCS1_v1_5用于签名,而不是密钥生成。来自手册:“密钥(RSA密钥对象)-用于对消息进行签名或验证的密钥。这是一个Crypto.PublicKey.RSA对象。仅当密钥是RSA私钥时才可以进行签名。”这是关于加密,而不是密钥生成的。重读Q&A,而不是一个关于密钥生成的单词。
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'