Q. Прятки

Стеганография — способ передачи или хранения информации с учётом сохранения в тайне самого факта такой передачи (хранения).

В отличие от криптографии, которая скрывает содержимое тайного сообщения, стеганография скрывает сам факт его существования. Как правило, сообщение будет выглядеть как что-либо иное, например, как изображение, статья, список покупок, письмо или судоку. Стеганографию обычно используют совместно с методами криптографии, таким образом, дополняя её.

Нам был дан файл со скрытым текстом. И было сообщено, что для выделения полезной информации, нужно из каждого кода символа в тексте «выдернуть» младший байт. Это и будет код символа полезной информации.
Однако есть одно «но». Если код символа меньше 128 — это и есть полезная информация.

Разработайте программу, которая из текстового файла выделяет полезную информацию.

Формат ввода

В файле secret.txt хранится текст.

Формат вывода

Выведите спрятанное сообщение.

Примечание

Для манипуляции кодами символов изучите работу функций chr и ord.

Пример

Ввод

᥈୥ᙬᱬᝯ, ᭷ᝯ୲੬๤!

Вывод

Hello, world!

Решение

В задании несколько “ловушек”.

После решения предыдущих задач, единственная сложность с которой вы можете столкнуться – подзабытые принципы работы с числовыми значениями кодировок символа. Те самые функции chr() и ord(), что упоминаются в примечании.

Открываем файл, читаем, итерируем полученный текст посимвольно, если код символа, полученый с помощью ord() больше 128, то отбрасываем старший байт (в младшем байте помещается 256 значений, значит берем остаток от деления 256) и добавляем его к результату. В противном случае добавляем символ нетронутым. По окончании выводим получившийся текст.

Подробнее про байты и их порядок можно прочитать в Википедии.

Посмотреть код

Решение

Python
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)
Подписаться
Уведомить о
guest
10 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии