2016-04-22 9 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') 

Две команды, которые предназначены для шифрования 'Bob' производить эти ошибки, и да я теперь, что первый способ не очень безопасен.

+0

Если объект предназначен для шифрования и дешифрования данных, и нет необходимости, чтобы пара открытого и закрытого ключей использовала симметричное шифрование, такое как AES. Даже при использовании асимметричного шифрования данные обычно шифруются с помощью симметричного шифрования. Асимметричные шифрования, ограниченные размером ключа и ** намного медленнее **, чем симметричное шифрование. – zaph

ответ

1

В Python 3 существует разница между строками и байтами. PyCrypto работает с байтами, поэтому вам нужно дать ему байты, но "Bob" - это строка. Вы можете преобразовать строку a в байты с a.encode(), которая использует кодировку по умолчанию. Если у вас есть другая кодировка, тогда вам нужно указать ее.

Вы также можете пометить буквенную строку как байты, указав ее b. Пример: b"Bob".