使用 RSA python 加密消息时出错
Error with encrypt message with RSA python
使用示例代码使用 RSA 加密消息,但出现以下错误。
Traceback (most recent call last):
File "E:/PythonProjects/skypy/skypy/codebase/utils/crypto.py", line 32, in <module>
print(RSAPubKey.encrypt("Hello.", 32))
File "E:\Programs\Python3.4\lib\site-packages\Crypto\PublicKey\RSA.py", line 150, in encrypt
return pubkey.pubkey.encrypt(self, plaintext, K)
File "E:\Programs\Python3.4\lib\site-packages\Crypto\PublicKey\pubkey.py", line 75, in encrypt
ciphertext=self._encrypt(plaintext, K)
File "E:\Programs\Python3.4\lib\site-packages\Crypto\PublicKey\RSA.py", line 224, in _encrypt
return (self.key._encrypt(c),)
File "E:\Programs\Python3.4\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'
这里是示例代码
from Crypto.PublicKey import RSA
from Crypto.Util import randpool
blah = randpool.RandomPool()
RSAKey = RSA.generate(1024, blah.get_bytes)
RSAPubKey = RSAKey.publickey()
print(RSAPubKey.encrypt("Hello.", 32))
OS use is Windows, 可能是什么问题导致的?
错误提示encrypt
方法不支持加密字符串消息。尝试先使用 encode
将字符串编码为字节,例如:
print(RSAPubKey.encrypt("Hello.".encode('utf-8'), 32))
还值得注意的是,根据文档,encrypt
执行 "textbook" RSA 加密,由于缺少填充,因此不安全。您应该改用 Crypto.Cipher.PKCS1_OAEP
或 Crypto.Cipher.PKCS1_v1_5
.
使用示例代码使用 RSA 加密消息,但出现以下错误。
Traceback (most recent call last):
File "E:/PythonProjects/skypy/skypy/codebase/utils/crypto.py", line 32, in <module>
print(RSAPubKey.encrypt("Hello.", 32))
File "E:\Programs\Python3.4\lib\site-packages\Crypto\PublicKey\RSA.py", line 150, in encrypt
return pubkey.pubkey.encrypt(self, plaintext, K)
File "E:\Programs\Python3.4\lib\site-packages\Crypto\PublicKey\pubkey.py", line 75, in encrypt
ciphertext=self._encrypt(plaintext, K)
File "E:\Programs\Python3.4\lib\site-packages\Crypto\PublicKey\RSA.py", line 224, in _encrypt
return (self.key._encrypt(c),)
File "E:\Programs\Python3.4\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'
这里是示例代码
from Crypto.PublicKey import RSA
from Crypto.Util import randpool
blah = randpool.RandomPool()
RSAKey = RSA.generate(1024, blah.get_bytes)
RSAPubKey = RSAKey.publickey()
print(RSAPubKey.encrypt("Hello.", 32))
OS use is Windows, 可能是什么问题导致的?
错误提示encrypt
方法不支持加密字符串消息。尝试先使用 encode
将字符串编码为字节,例如:
print(RSAPubKey.encrypt("Hello.".encode('utf-8'), 32))
还值得注意的是,根据文档,encrypt
执行 "textbook" RSA 加密,由于缺少填充,因此不安全。您应该改用 Crypto.Cipher.PKCS1_OAEP
或 Crypto.Cipher.PKCS1_v1_5
.