2016-04-22 223 views
0

所以我刚开始尝试使用Pycrypto并希望对消息进行加密和解密,但是我放在一起的这段代码产生了一些错误。Python:Pycrypto RSA公共密钥加密错误

这里,他们是:

enc_data = public_key.encrypt 

TypeError: unsupported operand type(s) for pow(): 'str', 'int','int'

ciphertext = cipher.encrypt('Bob') 

Traceback (most recent call last):

line 22, in ciphertext = cipher.encrypt('Bob')

File "C:\Anaconda3\lib\site-packages\Crypto\Cipher\PKCS1_OAEP.py", line 50, in encrypt
db = lHash + ps + bchr(0x01) + message

TypeError: can't concat bytes to str

的代码:

import Crypto 
from Crypto.Hash import SHA256 
from Crypto.PublicKey import RSA 
from Crypto.Cipher import PKCS1_OAEP 
from Crypto import Random 

random_generator = Random.new().read 
key = RSA.generate(1024, random_generator) 

public_key = key.publickey() 

enc_data = public_key.encrypt('Bob', 32) 

cipher = PKCS1_OAEP.new(key) 
ciphertext = cipher.encrypt('Bob') 

这意味着可以 '鲍勃' 加密的两个命令产生这些错误,并是的,我现在第一种方式不是很安全。

+0

如果对象只是对数据进行加密和解密,并且不需要公钥/私钥对使用对称加密(如AES)。即使使用非对称加密,数据通常也会使用对称加密进行加密。非对称加密限于密钥大小,比对称加密慢**。 – zaph

回答

1

在Python 3中,字符串和字节之间有区别。 PyCrypto在字节上工作,所以你需要给它字节,但"Bob"是一个字符串。您可以将字符串a转换为使用默认编码的a.encode()的字节。如果你有另一种编码,那么你需要指定它。

您还可以通过在b前加上一个文字字符串作为字节标记。例如:b"Bob"