Стеганография — способ передачи или хранения информации с учётом сохранения в тайне самого факта такой передачи (хранения).
В отличие от криптографии, которая скрывает содержимое тайного сообщения, стеганография скрывает сам факт его существования. Как правило, сообщение будет выглядеть как что-либо иное, например, как изображение, статья, список покупок, письмо или судоку. Стеганографию обычно используют совместно с методами криптографии, таким образом, дополняя её.
Нам был дан файл со скрытым текстом. И было сообщено, что для выделения полезной информации, нужно из каждого кода символа в тексте «выдернуть» младший байт. Это и будет код символа полезной информации.
Однако есть одно «но». Если код символа меньше 128 — это и есть полезная информация.
Разработайте программу, которая из текстового файла выделяет полезную информацию.
Формат ввода
В файле secret.txt хранится текст.
Формат вывода
Выведите спрятанное сообщение.
Примечание
Для манипуляции кодами символов изучите работу функций chr
и ord
.
Пример
Ввод
᥈ᙬᱬᝯ, ᭷ᝯ୲੬!
Вывод
Hello, world!
Решение
В задании несколько “ловушек”.
После решения предыдущих задач, единственная сложность с которой вы можете столкнуться – подзабытые принципы работы с числовыми значениями кодировок символа. Те самые функции chr() и ord(), что упоминаются в примечании.
Открываем файл, читаем, итерируем полученный текст посимвольно, если код символа, полученый с помощью ord() больше 128, то отбрасываем старший байт (в младшем байте помещается 256 значений, значит берем остаток от деления 256) и добавляем его к результату. В противном случае добавляем символ нетронутым. По окончании выводим получившийся текст.
Подробнее про байты и их порядок можно прочитать в Википедии.
Посмотреть код
Решение
file_name = 'secret.txt'
with open(file_name, encoding='UTF-8') as file:
data = file.read()
decoded = ''
for char in data:
code = ord(char)
code = code % 256 if code >= 128 else code
decoded += chr(code)
print(decoded)