У меня проблема с декодированием байтов в строку в Python.Я хотел взломать однобайтовый xor-шифр, перебрав его.И я сделал.Ключ был 90
(декабрь).Проблема здесь в том, что я на самом деле мог XOR каждый байт с номером > 127
, но тогда я всегда получал UnicodeError
, когда я хотел его декодировать.Все они выглядели одинаково, только разные байты:
128. 'utf-8' codec can't decode byte 0x98 in position 0: invalid start byte
def main():
d = base64.b64decode(base64string)
for i in range(1, 255):
try:
output_bytes = b''.join([bytes([b ^ i]) for b in d])
decoded = output_bytes.decode('utf-8')
except UnicodeDecodeError as e:
print(f'{i}. {e}')
pass
if __name__ == '__main__':
main()
Мне либо пришлось написать блок try/except
, чтобы предотвратить сбой моей программы, либо пришлось изменитьrange(1, 255)
до range(1, 127)
.
Это ожидаемое поведение?Если нет, то что я делаю не так, и если да, то почему?Разве я не смогу сделать xor
, а затем decode()
независимо от того, какой байт я использую?