2016-10-21 2 views
2

У меня есть байтовый массив, который является 128-битным ключом AES, и я хочу использовать его на скрипте Python для шифрования некоторой информации с использованием вышеупомянутого ключа.Использование байтового массива как ключа для алгоритма AES в Python

У меня есть ключ, сохраненный как шестнадцатеричная строка, что-то вроде «27821D90D240EA4F56D0E7612396C69E» (очевидно, это не настоящий ключ, но имеет тот же формат).

Я создал массив байтов из этого ключа, то есть способ, который я использую AES ключи на других языках (Java, C# и PHP) до сих пор, как это:

AES_KEY = bytearray.fromhex('27821D90D240EA4F56D0E7612396C69E') 

Это работает отлично , но потом, когда я пытаюсь использовать его для создания шифра, он жалуется, что он хочет строку в первом параметре:

cipher = AES.new(AES_KEY, AES.MODE_CBC, os.urandom(16)); 

TypeError: argument 1 must be string or read-only buffer, not bytearray

Я пытался получить строку из массива байтов, а не как :

AES_KEY = bytearray.fromhex('27821D90D240EA4F56D0E7612396C69E').decode() 

или

AES_KEY = bytearray.fromhex('27821D90D240EA4F56D0E7612396C69E').decode('utf-8') 

без толка, потому что есть не-ASCII и не Юникод значения в этом ключе.

Замена ключа НЕ является опцией.

Любые идеи?

Большое спасибо заранее,

+0

В какой библиотеке вы используете, pycrypto? – kennytm

+0

@kennytm да. Я думаю, что мне удалось найти решение. –

ответ

1

Видимо, это делает трюк:

AES_KEY = str(bytearray.fromhex('27821D90D240EA4F56D0E7612396C69E')) 

Это выглядит довольно очевидно сейчас, не так ли?

Смежные вопросы