Причина вашего наблюдения заключается в том, что AES является блочным шифром, который может шифровать данные только в блоках по 128 бит (= 16 байтов).Для этого он обычно используется с режимом работы (для шифрования больших фрагментов данных) и режимом заполнения.Похоже, что ваша функция дешифрования на python выполняет дешифрование, но не отменяет заполнение, давая вам такой результат.
Вы используете заполнение PKCS # 5, которое добавит количество байтов (по крайней мере, один), все то же значение, что и это число, поэтому конечная длина кратна длине блока.
- Для вашей 8-байтовой строки необходимо добавить 8 байтов, каждое из которых равно значению 8ASCII 8 - это символ возврата на одну позицию, который в вашем терминале перемещает курсор на один влево (8 раз), в результате чего
xxx
печатает abc
. - . Для вашей 7-байтовой строки одиннеобходимо добавить 9 байтов, каждое из значений 9. Это горизонтальный табулятор, заставляющий ваш
xxx
показываться совсем справа.
Либо узнайте, как задать правильный режим заполнения для вашего дешифрованияфункции (она должна иметь такую опцию), или удалите заполнение самостоятельно: проверьте последний байт decrypt_string, преобразуйте в число (используя его значение ASCII) и возьмите столько байтов изконец decrypt_string
.Вы также должны проверить, что все они имеют одинаковое значение.(Вы должны сделать это сначала, прежде чем интерпретировать вывод как строку, то есть применить кодировку, например UTF-8 или ASCII.)