У меня есть зашифрованное сообщение 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, почему он не работает?