Всем привет! С приближением Нового года мы запускаем IT-челлендж, чтобы размять мозги перед праздничным отдыхом. Мы подготовили для разработчиков интересную загадку, которая потребует всей вашей логики и смекалки. Тот, кто решит эту задачу первым и представит элегантное решение, получит главный приз: годовой Telegram Premium (или ~2500 звёзд)!

Суть задачи: перед вами зашифрованная строка, нужно превратить её в осмысленное сообщение, придётся написать собственное решение и разобраться, что именно перед вами за шифр. Не всё так просто.

2E3GX3C3U93E4JK545I35M69L6Q6N78F91PAF9D0CED0GEAF91GQHZRJ6K95LON1TN4QB2S0TMVVR

Чтобы ваше решение было засчитано:

  • Оформить решение в виде кода (скрипт на любом языке, выполняющий расшифровку);

  • Расшифровать и указать итоговое осмысленное сообщение;

  • Разместить код и результат в репозитории (GitHub / GitLab / GitVerse и т.д.)

Подробное описание задания, официальные подсказки и обсуждение подходов мы публикуем в отдельном топике нашего Telegram-сообщества Open Source программистов. Там же можно следить за апдейтами по челленджу и идеями участников.

Отдельная благодарность @whoissoeeA за идею задачи, её подготовку и помощь в организации конкурса.

Комментарии (36)


  1. lov4ble
    14.12.2025 13:59

    Задача интересная, уже присоединился к обсуждению))


  1. anonymous
    14.12.2025 13:59


  1. eimrine
    14.12.2025 13:59

    Я вижу что есть все символы 0-9 и все буквы кроме Y, W. Скорее всего какой-то base-36. Исходя из того что есть нуль и буква O, эта кодировка применена не для человекочитаемости. Может быть, какое-то хитрое представление чего-то известного вроде числа PI - но наличие такого большого количества возможных символов не похоже не рандомный выхлоп. Возможно эту строку нужно как-то нарезать на подстроки которые гуглятся. И почему это именно для разработчиков, почему не для математиков/криптографов?


    1. GennPen
      14.12.2025 13:59

      И почему это именно для разработчиков, почему не для математиков/криптографов?

      Потому что дальше не математическая/криптографическая задача.

      Да и кодирование в base** это не криптография, а способ предоставления информации в другой размерности.


      1. eimrine
        14.12.2025 13:59

        дальше не математическая/криптографическая задача.

        Откуда вам это известно?

        а способ предоставления информации

        Что-то я не вижу никакой информации в строке "2E3GX3C3U93E4JK545I35M69L6Q6N78F91PAF9D0CED0GEAF91GQHZRJ6K95LON1TN4QB2S0TMVVR".

        Всего лишь 77 чисел с повторами.


        1. temaweb10 Автор
          14.12.2025 13:59

          Следите за подсказки по конкурсу ТУТ


        1. GennPen
          14.12.2025 13:59

          Откуда вам это известно?

          Дошел до осмысленной фразы. Дальше нет смысла продолжать, т.к. завтра утром на работу, и скорее всего к тому времени уже все решат.


          1. temaweb10 Автор
            14.12.2025 13:59

            Далеко не факт что завтра решат. Пока никто не был сильно близок


  1. xuiz
    14.12.2025 13:59

    Как раз не хватало новогоднего айтишного квеста)


    1. iv_kingmaker
      14.12.2025 13:59

      Даже зарегистрировались, чтобы это написать.


  1. DFH
    14.12.2025 13:59

    Недавно попадалась публикация на Хабре, еще времен пещерного периода, о сложности восприятия текстовой информации набранной заглавными буквами)


    1. Sudeka
      14.12.2025 13:59

      Если не затруднит, ткните пожалуйста носом (в ссылку). Не нашел, а интересно.


      1. DFH
        14.12.2025 13:59

        Пожалуйста, журнал помнит все: "Почему текст, набранный заглавными буквами, трудно читать" - https://habr.com/ru/articles/103659/


  1. Kamil_GR
    14.12.2025 13:59

    интересно


  1. jshapen
    14.12.2025 13:59

    ЧатГПТ минут 5 думал, но выдал фразу. Не знаю правильную или нет)


    1. buzzer84
      14.12.2025 13:59

      Дипсик тоже минут 5 скрипел, но не отгадал. Тоже не знаю, правильно это или нет.


      1. jshapen
        14.12.2025 13:59

        12 слов?


      1. temaweb10 Автор
        14.12.2025 13:59

        Тут написано подробнее куда отправлять результат на проверку


  1. anonymous
    14.12.2025 13:59


  1. stpotanin
    14.12.2025 13:59

    "Получить и указать"
    указать где?


    1. temaweb10 Автор
      14.12.2025 13:59

      Нужно расшифровать, прислать решение кодом на любом языке и полученный текст. Тут написано подробнее куда отправлять результат


  1. 10ball
    14.12.2025 13:59

    С учетом того, что это base36, то энтропия преобразованного сообщения в байтах ~ 232 бита ( AES-256 , к примеру, это 256 битов и он ломается только квантовым компьютером ).
    Есть предположение, что это на 70% шифр XOR с ключом L=7. Но даже перебор ключа это ~ 2^56 вариантов.

    Результаты нейросети :/


    1. eimrine
      14.12.2025 13:59

      энтропия преобразованного сообщения в байтах ~ 232 бита

      Так в байтах или в битах?

      Никакого AES тут не может быть никак, ведь это шутка а не кусок переписки Павла Дурова. Может быть, какой-нибудь шифр Цезаря.

      L может быть и 11 тоже.


      1. 10ball
        14.12.2025 13:59

        base 36 раскладывается на строку из байтов, а ее энтропия измеряется битами. А метод Казински показал, что L скорее всего 7 или 14 :)

        Это и не AES , это сравнение с AES, чтобы наглядно понять, что энтропия сравнима с промышленным стандартом


      1. 10ball
        14.12.2025 13:59

        кстати, там ребята расшифровали уже и все оказалось еще сложнее) нужно было изначальное сообщение очистить от шума, потом бейс36, потом пройтись квадратичной функцией и потом применить шифр Цезаря со сдвигом

        Так что мой расчет неправильный :)


        1. eimrine
          14.12.2025 13:59

          Пусть весёлый тамада телеграмм-группы сделает просмотр его ресурса без регистрации и без смс хотя бы на время интересного конкурса - тогда я смогу ознакомиться с прогрессом других участников, с подсказками и с результатом конкурса в целом. Некоторые каналы в телеге ведь можно читать без регистрации и смс. Всё-таки, я - хабраюзер, читающий статью на Хабре и имеющий права писать комментарии на Хабре.

          Чем там мог быть полезен метод Касински мне не понятно - в шифротексте повторяется только "D0" и "V". Что там можно чистить от шума в такой короткой строке - тоже не понятно.

          base 36 раскладывается на строку из байтов, а ее энтропия измеряется битами.

          Но ведь base36 можно разложить ещё и на биты, а энтропию можно посчитать ещё и в байтах. Энтропия строчки из 77 символов равна либо семидесяти семью байтам (77 * 1), либо триста сорока шести с половиною байт (36 * 77 / 8). Как прити к энтропии в 232 бита мне непонятно.


          1. 10ball
            14.12.2025 13:59

            исходная строка base36 - декодировали в 56 байт

            энтропия Шеннона для этих 56 байт ~ 4.2 бит/на байт

            общая энтропия сообщения 4.2×56 = 235 бит ( 232 было округлением )

            эти 235 бит не мера криптостойкости, а мера неопределенности данных

            у нас 235 бит значит данные не полностью случайны - в них есть избыточность/структура

            вывод: 235 бит энтропии это не реальная криптостойкость сообщения, а статистическая мера данных. И это случай, когда энтропия вводила в заблуждение, так как данные были структурированным текстом, замаскированным шумом и преобразованиями

            что касается шума в строке - там каждый 5 символ это буквально шум, что написано в подсказке в тг

            внимательно посмотрите на декодированную бейс36 строку. метод Касински обнаружил повтор в 9 байт, расстояние между повторами 14 байт. вывод L= 1, 2, 7, 14 ( множители числа 14 ). Вероятнее всего был ключ 7, но если бы это был XOR, который я предполагал изначально. Но это не XOR, а кастомный шифр, который без подсказок в тг решался только брутфорсом


  1. OldMamont
    14.12.2025 13:59

    encrypted_text = "2E3GX3C3U93E4JK545I35M69L6Q6N78F91PAF9D0CED0GEAF91GQHZRJ6K95LON1TN4QB2S0TMVVR"
    alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    key_hex = "6ce0acaddfdbbf41a511bfa8f3007a983ade5a"
    key = bytes.fromhex(key_hex)

    def base36_decode(s, alphabet):
    num = 0
    for ch in s:
    num = num * 36 + alphabet.index(ch)
    return num.to_bytes((num.bit_length() + 7) // 8, 'big')

    encrypted_bytes = base36_decode(encrypted_text, alphabet)
    decrypted_bytes = bytes(encrypted_bytes[i] ^ key[i % len(key)] for i in range(len(encrypted_bytes)))

    result_text = ""
    for byte in decrypted_bytes:
    if 32 <= byte <= 126:
    result_text += chr(byte)
    else:
    break

    print("Исходная строка (base-36):")
    print(encrypted_text)
    print("\nКлюч XOR (hex):")
    print(key_hex)
    print("\nРезультат расшифровки:")
    print(result_text)

    Исходная строка (base-36):
    2E3GX3C3U93E4JK545I35M69L6Q6N78F91PAF9D0CED0GEAF91GQHZRJ6K95LON1TN4QB2S0TMVVR

    Ключ XOR (hex):
    6ce0acaddfdbbf41a511bfa8f3007a983ade5a

    Результат расшифровки:
    happy new year 2026


    1. OldMamont
      14.12.2025 13:59

      но это неправильно :(


      1. eimrine
        14.12.2025 13:59

        alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

        Есть ли надежды что хотя бы эта строчка тут правильна? Ведь мы не знаем ничего ни про что и алфавит может быть любым. Я вижу эту строчку в любой программе по расшифровке base36.


        1. OldMamont
          14.12.2025 13:59

          предположение что алфавит 36 = 26 букв+10цифр, вроде как угадано верно, наличие ключа в общем то это подтверждает...


          1. eimrine
            14.12.2025 13:59

            Суть алфавита в том чтобы прописать каждому символу цифровое значение, например первый элемент алфавита, 0, имеет первый индекс, тоже 0, символ A имеет цифровое значение 11, итд. А может быть, тут алфавит такой что первый символ Q, второй 4 - то есть совсем рандомный, а не стандартный. Подобрать правильный алфавит и может быть выскочит что-то другое осмысленное.


    1. Maxim_Q
      14.12.2025 13:59

      Прошу пояснить откуда взялся этот ключ? Как нам вообще можно было догадаться что нужно использовать для дешифровки именно этот ключ?

      key_hex = "6ce0acaddfdbbf41a511bfa8f3007a983ade5a" # как вы его получили?

      Например когда я расшифровывал у меня другой ключ получился, вот этот: 42f4bfb68682be51f248a3ace052689a38da4d68 подставьте в свой код.

      P.S. Я не считаю это решением вообще, ни свое ни ваше.


      1. OldMamont
        14.12.2025 13:59

        походу ваш результат гораздо правильнее и реалистичнее...


        1. temaweb10 Автор
          14.12.2025 13:59

  1. Gary_Ihar
    14.12.2025 13:59

    listentothesoundofthesystem - это нейронка выдала)