2016-04-22 221 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"