Python Crypto.Cipher напрямую принимает шестнадцатеричные данные? - PullRequest
0 голосов
/ 01 апреля 2020

Фундаментальное понимание AES: 1) 128-битный / 192-битный / 256-битный KEY 2) размер блока данных составляет 16 байтов / 128 битов 3) зашифрованный (зашифрованный) текст и простой текст имеют одинаковую длину

Однако, когда доходит до Python реализации Crypto.Cipher AES, KEY & DATA представляется в виде ASCII. Итак, что если мои исходные данные представлены в шестнадцатеричном формате? Должен ли я преобразовать их в формат ASCII, прежде чем передать его в шифрование AES? То же самое должно быть применимо и к KEY?

Какой-то пример кода, который я нашел, показывает, что зашифрованные данные могут быть преобразованы в HEX-форму, но входные данные (KEY & PLAIN TETXT) должны быть в Форма ASCII?

>>> from Crypto.Cipher import AES
>>> a = AES.new("1234567890123456")
>>> m = 'aaaabbbbccccdddd'
>>> a.encrypt(m)
'H\xe7\n@\xe0\x13\xe0M\xc32\xce\x16@\xb2B\xd0'

>>> import binascii
>>> binascii.hexlify(a.encrypt(m))
'48e70a40e013e04dc332ce1640b242d0'

1 Ответ

0 голосов
/ 01 апреля 2020

Использование bytes.fromhex должно легко достичь цели.

Пример:

b = AES.new((bytes.fromhex('31323334353637383930313233343536')))
print(binascii.hexlify(b.encrypt(m)))
...