繁体   English   中英

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

[英]How to encrypt (and decrypt) data with pycrypto and RSA?

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

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

如果您查看encrypt方法:

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

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

请注意,“纯文本”只是加密原语的输入。 所有现代密码都对字节进行操作。 从历史上看,输入可能是实际的文本,但现在不是了。


另请注意:

注意:该函数执行普通的、原始的 RSA 加密(教科书)。 在实际应用中,你总是需要使用适当的加密填充,你不应该直接用这种方法加密数据。 不这样做可能会导致安全漏洞。 建议改用模块Crypto.Cipher.PKCS1_OAEPCrypto.Cipher.PKCS1_v1_5

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM