scidam
А этот случай, мне кажется, не относится к делу
С чего это ты взял? Я могу вообще взять строку из одних нулей и зашифровать её. И при расшифровке мне нужно получить её же прямо в точности. Кто сказал, что шифровать можно только текст?
scidam
“aaaaaaaaaaaaaaa\x01” интерпретируется как ‘a’*16
С чего ты взял, вот она как интерпретируется
>>> b'aaaaaaaaaaaaaaa\x01'
b'aaaaaaaaaaaaaaa\x01'
>>> len(_)
16
>>>
Вот эту строку я и шифрую, и при расшифровке нужно получить именно вот это. А по твоей схеме получается, что там просто этот последний байт откусывается и всё, потому что по твоей схеме невозможно отличить этот случай и она начинает рассматривать его как выравнивание, когда там никакого выравнивания нет.
А у тебя получается знаешь, как: “если нужно откусывать, то там не должно быть дополнительного блока; а если нужно оставить, то там должен быть дополнительный блок”. А мой вариант предполагает наличие дополнительного блока в любом случае. И то, не факт, что он должен быть там один, их вообще можно рандомно выбирать. Может там один служебный блок, а может несколько служебных блоков. Ты когда расшифровал, то по последнему числу числу можешь определить протяжённость заполнителя. И то, необязательно там в одном байте это хранить, можно вообще выделить несколько байт и как-то это пометить. Тогда тот, кто расшифровывает, будет думать “а сколько там байт в конце под число выделено? а он там один? а может он там не один? это неизвестно”.