Гений подозревается Их тексты зрели Google, но им нужен был способ доказать это. Таким образом, они отметили некоторые из своих текстов с помощью сообщения в коде Морзе. Он прочитал Красная рука Анкет Он был закодирован с использованием различных типов апострофов. Я подозреваю, что они использовали U+0027 Апостроф и U+2019 Правильная однозначная оценка Поскольку это наиболее часто используется Но я не могу быть уверен.
Давайте напишем решение этой проблемы: кодировать сообщение в апострофах через код Морзе. Мы предположим, что только эти два апострофа доступны. Я выбираю Python, потому что он хорош для манипуляций с струнами.
Важные части: наши два маркера и алфавит в Морсе.
APOSTROPHE = '\'' RIGHT_MARK = ''' morse = [".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."]
Во -первых, нам нужен способ преобразования текста в код Морзе. 'Cat'
становится '-.-..--'
(Что в некотором смысле выглядит как спящий кот!).
# flatten a 2D list flatten = lambda l: [item for sublist in l for item in sublist] # :text: a message made up of [a-zA-Z] def to_morse(message): m = [morse[ord(c)-97] for c in message.lower()] return flatten(m)
Я выбрал Апостроф представлять точку в Морсе, поскольку она имеет более низкое значение Unicode. Правая однозначная кавычка представляет собой черту. Как только у нас появится наше послание в Морсе, мы преобразуем его в сообщение апострофы, используя замену. Затем мы повторяем исходный текст, пока не достигнем апострофа и не обмениваемся его на следующего символа в нашем сообщении. Взглянем.
# :message: a message to encode # :source: a source text with apostrophes def insert_morse(message, source): # a list of dots and dashes morse = to_morse(message) # a list of the two types of apostrophes secret = [APOSTROPHE if m == '.' else RIGHT_MARK for m in morse] inserted = [] for c in source: if len(secret) > 0 and (c == APOSTROPHE or c == RIGHT_MARK): inserted.append(secret.pop(0)) else: inserted.append(c) return ''.join(inserted)
Если вам интересно, как декодировать исходный текст, в котором такое сообщение, закодированное внутри, на самом деле гораздо проще.
# :source: a source encoded via insert_morse def retrieve_morse(source): morse = [] for c in source: if c == APOSTROPHE: morse.append('.') elif c == RIGHT_MARK: morse.append('-') return ''.join(morse)
Давайте посмотрим на пример этого в действии.
source_text = 'Hello \'\' World, \'\' no \'\' secrets \' here!' secret = 'cat' encoded_message = insert_morse(secret, source_text) retrieved_message = retrieve_morse(encoded_message) print(encoded_message) # Hello '' World, '' no '' secrets ' here! print(retrieved_message) # -.-..--
Довольно аккуратно. Если вы думали, что это круто, подождите, пока не узнаете, как люди используют Пространства с нулевой шириной Чтобы встать на более продвинутую хитрость отпечатков пальцев.
Упражнение декодирования и Понимание сообщения Морса без пробелов остается для читателя! Я хотел бы услышать ваши мысли и ресурсы о том, чтобы скрыть данные на виду в Интернете.
Возьмите код из этой статьи на GitHub Анкет
Присоединяйтесь к 150+ человек, подписавшись на мой Информационный бюллетень О программировании и личностном росте!
Я пишу в Твиттере о технологии @Healeycodes Анкет
Оригинал: “https://dev.to/healeycodes/a-tutorial-on-tricking-google-encoding-messages-in-apostrophes-45n4”