Comments 38
Задача интересная, уже присоединился к обсуждению))
Я вижу что есть все символы 0-9 и все буквы кроме Y, W. Скорее всего какой-то base-36. Исходя из того что есть нуль и буква O, эта кодировка применена не для человекочитаемости. Может быть, какое-то хитрое представление чего-то известного вроде числа PI - но наличие такого большого количества возможных символов не похоже не рандомный выхлоп. Возможно эту строку нужно как-то нарезать на подстроки которые гуглятся. И почему это именно для разработчиков, почему не для математиков/криптографов?
И почему это именно для разработчиков, почему не для математиков/криптографов?
Потому что дальше не математическая/криптографическая задача.
Да и кодирование в base** это не криптография, а способ предоставления информации в другой размерности.
Как раз не хватало новогоднего айтишного квеста)
Недавно попадалась публикация на Хабре, еще времен пещерного периода, о сложности восприятия текстовой информации набранной заглавными буквами)
Если не затруднит, ткните пожалуйста носом (в ссылку). Не нашел, а интересно.
Пожалуйста, журнал помнит все: "Почему текст, набранный заглавными буквами, трудно читать" - https://habr.com/ru/articles/103659/
интересно
ЧатГПТ минут 5 думал, но выдал фразу. Не знаю правильную или нет)
"Получить и указать"
указать где?
С учетом того, что это base36, то энтропия преобразованного сообщения в байтах ~ 232 бита ( AES-256 , к примеру, это 256 битов и он ломается только квантовым компьютером ).
Есть предположение, что это на 70% шифр XOR с ключом L=7. Но даже перебор ключа это ~ 2^56 вариантов.
Результаты нейросети :/
энтропия преобразованного сообщения в байтах ~ 232 бита
Так в байтах или в битах?
Никакого AES тут не может быть никак, ведь это шутка а не кусок переписки Павла Дурова. Может быть, какой-нибудь шифр Цезаря.
L может быть и 11 тоже.
base 36 раскладывается на строку из байтов, а ее энтропия измеряется битами. А метод Казински показал, что L скорее всего 7 или 14 :)
Это и не AES , это сравнение с AES, чтобы наглядно понять, что энтропия сравнима с промышленным стандартом
кстати, там ребята расшифровали уже и все оказалось еще сложнее) нужно было изначальное сообщение очистить от шума, потом бейс36, потом пройтись квадратичной функцией и потом применить шифр Цезаря со сдвигом
Так что мой расчет неправильный :)
Пусть весёлый тамада телеграмм-группы сделает просмотр его ресурса без регистрации и без смс хотя бы на время интересного конкурса - тогда я смогу ознакомиться с прогрессом других участников, с подсказками и с результатом конкурса в целом. Некоторые каналы в телеге ведь можно читать без регистрации и смс. Всё-таки, я - хабраюзер, читающий статью на Хабре и имеющий права писать комментарии на Хабре.
Чем там мог быть полезен метод Касински мне не понятно - в шифротексте повторяется только "D0" и "V". Что там можно чистить от шума в такой короткой строке - тоже не понятно.
base 36 раскладывается на строку из байтов, а ее энтропия измеряется битами.
Но ведь base36 можно разложить ещё и на биты, а энтропию можно посчитать ещё и в байтах. Энтропия строчки из 77 символов равна либо семидесяти семью байтам (77 * 1), либо триста сорока шести с половиною байт (36 * 77 / 8). Как прити к энтропии в 232 бита мне непонятно.
исходная строка 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, а кастомный шифр, который без подсказок в тг решался только брутфорсом
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
но это неправильно :(
alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Есть ли надежды что хотя бы эта строчка тут правильна? Ведь мы не знаем ничего ни про что и алфавит может быть любым. Я вижу эту строчку в любой программе по расшифровке base36.
предположение что алфавит 36 = 26 букв+10цифр, вроде как угадано верно, наличие ключа в общем то это подтверждает...
Суть алфавита в том чтобы прописать каждому символу цифровое значение, например первый элемент алфавита, 0, имеет первый индекс, тоже 0, символ A имеет цифровое значение 11, итд. А может быть, тут алфавит такой что первый символ Q, второй 4 - то есть совсем рандомный, а не стандартный. Подобрать правильный алфавит и может быть выскочит что-то другое осмысленное.
Прошу пояснить откуда взялся этот ключ? Как нам вообще можно было догадаться что нужно использовать для дешифровки именно этот ключ?
key_hex = "6ce0acaddfdbbf41a511bfa8f3007a983ade5a" # как вы его получили?Например когда я расшифровывал у меня другой ключ получился, вот этот: 42f4bfb68682be51f248a3ace052689a38da4d68 подставьте в свой код.
P.S. Я не считаю это решением вообще, ни свое ни ваше.
походу ваш результат гораздо правильнее и реалистичнее...
Решение задачи тут:
https://github.com/OpenSourceDevsHub/Christmas-Contest-2025
listentothesoundofthesystem - это нейронка выдала)
Новогодний IT-челлендж для разработчиков: сможете расшифровать сообщение?