首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用pycrypto和RSA加密(和解密)数据?

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

Stack Overflow用户
提问于 2016-03-13 06:07:42
回答 1查看 2.9K关注 0票数 1

我一直在尝试用Python和RSA在pycrypto中加密数据。我尝试遵循这里的说明:http://www.laurentluce.com/posts/python-and-cryptography-with-pycrypto/,但当我调用enc_data = public_key.encrypt('abcdefgh', 32)时,结果如下所示

代码语言:javascript
复制
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'

提前感谢您对此问题的任何建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-13 06:47:51

如果您查看encrypt方法:

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

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

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

另请注意:

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35963916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档