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
8 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
nmalkam
15.12.2023 13:26

деление на 128 тоже работает, вместо 256

nmalkam
Ответить на  Сергей Клочко
16.12.2023 06:39

для меня это сложная тема))

https://www.cyberforum.ru/python-tasks/thread3117483.html

вот здесь ещё информацию нашел и способы реализации

nmalkam
Ответить на  Сергей Клочко
17.12.2023 04:13

я изучаю тему по youtube во время еды

https://youtu.be/k9wK2FThEsk

может быть вы посоветуете ресурсы??

nmalkam
Ответить на  Сергей Клочко
19.12.2023 12:53

Можно попросить вас, пожалуйста, разделить комментарий.
Тут часть ответа на задание J.

https://reshebnik.mumuproject.com/frontpage/yandex-python-handbook/yandex-python-3-5-potokovyj-vvod-vyvod-rabota-s-tekstovymi-fajlami-json/yandex-handbook-sliyanie-dannyh/#comment-47

очень хотелось бы перенести код и ваши мысли