2015-09-11 4 views
1

У меня есть зашифрованное сообщение AES256 как строка. Сообщение состоит из IV (16 байтов HEX-номеров, так что всего 32 символа в строке) и 64 байта полезной нагрузки HEX (128 символов). Следовательно, это одна строка из 160 символов, состоящая из номеров HEX 00, e0, f2 и т. Д. Почему это строка? Он получен от другого устройства в виде строки.Преобразование строки шестнадцатеричных чисел в шестнадцатеричный для pycrypto (Python 3.4)

Теперь я разбиваю зашифрованное сообщение на IV и полезную нагрузку, используя код «iv = зашифрованный [: 16]». IV - это только нули (для целей тестирования). Если я использую iv = bytes.fromhex(iv), я могу напечатать iv как b'\x00\x00\x00..., что и я ожидаю.

Но когда я делаю то же самое для сообщения полезной нагрузки, начиная с 9ed57a..., я ожидал бы получить b'\x9e\xd5\x7a... и т. Д., Вместо этого получаю b'\x9e\xd5z_\xe3.... Что означают эти дополнительные символы (z_) и почему следующий байт, кажется, полностью отличается от того, что у меня есть в моей исходной строке?

Печать не будет проблемой, конечно, но когда я использую AES.decrypt, я получаю мусор, даже когда я уверен, что у меня есть тот же пароль как на отправляющем, так и на приемном конце моей установки. Если мой код полностью ошибается, я очень благодарен за помощь в правильном осуществлении того, что я пытаюсь сделать здесь.

Edit:

Я пытался что-то еще сейчас, я пытаюсь превратить строку гексов в массив байтов, используя петлю. Кажется, он работает до передачи функции дешифрования. Я получаю сообщение "ValueError: Input strings must be a multiple of 16 in length", которое я не понимаю, так как моя строка ввода составляет ровно 64 символа (при печати len(msg)). Сообщение - это все странные символы, но поскольку он разбирается со стандартными шестнадцатеричными значениями от 0x00 до 0xff, почему он не работает?

ответ

0

Python не печатает красиво печатаемые символы в качестве escape-последовательностей, а скорее как их аналог ASCII. Когда вы заглянете в таблицу ASCII, вы увидите, что \x7a или 0x7a соответствует нижнему регистру z.

Не все байты могут быть напечатаны таким образом. Например, все байтовые значения ниже 0x20 являются непечатаемыми байтами управления.

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