2014-10-06 3 views
0

Следующий код работает хорошо:Шифрование строки Юникода с pyaes

import os, pyaes 
key = os.urandom (16) 
aes = pyaes.AESModeOfOperationCTR (key) 
encrypted = aes.encrypt ('Hello world') 
aes = pyaes.AESModeOfOperationCTR (key) 
decrypted = aes.decrypt (encrypted) 
print (encrypted) 
print (decrypted) 

Но когда я пытаюсь кодировать строку Юникода, как строка, содержащая Hebrew буквы, например, он выдает ошибку:

ValueError: bytes must be in range(0, 256) 

Как кодировать символы Unicode?

ответ

1

Unicode может быть более одного байта, однако ваш кодер/декодер AES ожидает строку из одного байта.

Вы должны кодировать Юникода в отдельные байты (обычно utf8 работает для этого):

unicode_string = u"\u00b0C" 
encrypted = aes.encrypt(unicode_string.encode("utf8")) 

тогда, когда вы расшифровать его нужно расшифровать:

decrypted = aes.decrypt(encrypted).decode("utf8") 
Смежные вопросы