Рубрики
Без рубрики

Учебное пособие по обмануте Google: кодирование сообщений в апострофах

Гениальность подозревал, что их тексты зрели Google, но им нужен был способ доказать это. Поэтому они… Tagged с обсуждением, Python, новичками, учебным пособием.

Гений подозревается Их тексты зрели 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”