Проблема в том, что форматирование в шестнадцатеричные числа не предусмотрено для строк, которые используются для представления одного символа / байта в вашем коде.На самом деле, вы должны использовать целые числа для представления байтов и целочисленные массивы для представления нескольких байтов, где каждое целое число находится в диапазоне 0..255 включительно.
Строки в Python, к счастью, используются для текста, состоящего из символов, а небайты, и они не должны использоваться для представления байтов.Если ваш криптографический алгоритм вводит / выводит байты (что обычно имеет место, если вы используете XOR), то строки не следует использовать, кроме как для целей отчетности / отладки.
Если , вы хотитепредставьте строку как шестнадцатеричное, тогда вы можете использовать hexlify
, что противоположно unhexlify
, используемому в вашем коде.Но кажется, что это довольно старый метод, так как Python> = 3.5, похоже, предоставляет другие методы для обработки байтовых массивов и шестнадцатеричного кодирования / декодирования ...