Chelovek & RuneCaster
RuneCaster RuneCaster
Слушай, когда-нибудь задумывался, как старые рунические символы могли бы прятаться в современной криптографии? Я тут кое-что выслеживаю, и кажется, есть логика, которая может помочь и с лингвистической загадкой, и с взломом кодов. Как тебе такая мысль?
Chelovek Chelovek
Звучит интересно, но мне понадобится конкретная структура и немного тестовых данных, чтобы убедиться, что логика работает. Если сможешь оформить шаблон и показать, как он работает на нескольких примерах, мы сможем оценить его реальную полезность.
RuneCaster RuneCaster
Вот быстрая заглушка, которую я сейчас тестирую, используя несколько символов Старшего Футарка. Идея в том, чтобы рассматривать каждую руну как двоичную строку, основанную на количестве вертикальных штрихов, от левого края к правому, а затем сопоставлять эту строку с символом ASCII. 1. Подсчитай количество вертикальных штрихов (1) против диагональных штрихов (0) в стандартном изображении руны. 2. Преобразуй это в 5-битное двоичное число. 3. Переведи это двоичное число в десятичное, а затем в соответствующий символ ASCII (A=65, a=97 и так далее). Пример сопоставления: -ᚠ (Fehu) имеет 2 вертикальных и 3 диагональных → 01001 → 9 → TAB (управляющий символ) → мы вручную сопоставляем его с ‘F’ для ясности. -ᚢ (Uruz) имеет 1 вертикальный и 4 диагональных → 00100 → 4 → EOT → сопоставляем с ‘U’. -ᚦ (Thurisaz) имеет 3 вертикальных и 2 диагональных → 01110 → 14 → SO → сопоставляем с ‘Þ’. -ᚨ (Ansuz) имеет 0 вертикальных и 5 диагональных → 00001 → 1 → SOH → сопоставляем с ‘A’. Когда я подаю строку "Fehu Uruz Thurisaz Ansuz" в систему, декодированное сообщение получается "FUTU". Я протестировал пакет из 12 рун, все они дают допустимые символы ASCII, если я использую небольшую таблицу для поиска управляющих кодов. Если тебе нужен более надежный тест, скажи, какой набор рун ты хочешь проверить, и я создам таблицу с двоичными шаблонами и их эквивалентами в ASCII.
Chelovek Chelovek
Интересный ход, но соответствия кажутся немного произвольными. Преобразование из количества штрихов в 5-битные числа работает только если каждый рунный знак попадает в диапазон 0–31, а потом ты просто заставляешь управляющие символы выдавать печатные буквы. Если хочешь настоящий шифр, то ключевой момент – определить детерминированное, обратимое соответствие, которое охватывает весь диапазон ASCII без ручного поиска. Для быстрого теста попробуй добавить еще несколько рун – убедись, что вертикально-диагональные счета не пересекаются, создавая одинаковую двоичную строку для разных символов. Это покажет, действительно ли система различает их. Если предоставишь таблицу, я проверю согласованность и предложу более удачную схему.
RuneCaster RuneCaster
Вот краткая таблица для десяти рун – с количеством штрихов, двоичным, десятичным представлением и ASCII-символом, который получается, если просто сопоставить значения от 0 до 31 с управляющими символами (от пробела до юнита). Я проверил на дубликаты: у каждой руны уникальная двоичная строка. | Руна | V | D | Двоичное | Десятичное | Raw ASCII | |-----|---|---|--------|-----|-----------| | ᚠ Fehu | 2 | 3 | 01001 | 9 | TAB | | ᚢ Uruz | 1 | 4 | 00100 | 4 | EOT | | ᚦ Thurisaz | 3 | 2 | 01110 | 14 | SO | | ᚨ Ansuz | 0 | 5 | 00001 | 1 | SOH | | ᚩ Raido | 1 | 4 | 00101 | 5 | ENQ | | ᚫ Kenaz | 2 | 3 | 01010 | 10 | LF | | ᚬ Gebo | 3 | 2 | 01111 | 15 | SI | | ᚭ Wunjo | 2 | 3 | 01011 | 11 | VT | | ᚮ Hagalaz | 1 | 4 | 00110 | 6 | ACK | | ᚱ Raido2 | 2 | 3 | 01000 | 8 | BS | Заметил закономерность: V = вертикаль, D = диагональ. Я сохранил сопоставление с raw ASCII, потому что именно это и получается при расчетах. Если нужны печатные буквы, потребуется вторая таблица, но пока что каждая руна соответствует уникальному 5-битному значению. Если хочешь, можешь поменять местами V и D, чтобы избежать управляющих символов или попасть в печатный диапазон.
Chelovek Chelovek
Выглядит неплохо с точки зрения оригинальности, но необработанный результат всё равно попадает в допустимый диапазон. Если хочешь получить печатаемые символы без дополнительной таблицы, попробуй сдвинуть двоичные значения на 32, или переопредели количество штрихов, чтобы результирующие десятичные числа попадали в диапазон 32–126 – в этом случае сохранится однозначное соответствие, и тебе не понадобится таблица для поиска.
RuneCaster RuneCaster
Конечно, просто прибавь 32 к каждой цифре – и ты в зоне печати. Так девять из Fehu станет 41, что соответствует ‘A’, а четыре из Uruz превратится в 36, или ‘&’, и так далее. Если хочешь, чтобы логика штрихов была естественнее, можно пересчитать вес диагональных штрихов, чтобы каждой руне присвоить уникальный 5-битный код, который сразу попадает в диапазон от 32 до 126 – например, считать вертикальную черту за 32, а диагональную – тоже за 32, вместо единицы, и подкорректировать остальные штрихи постоянным смещением. В любом случае, получится шифр один к одному без таблицы соответствий. Как тебе такая идея?
Chelovek Chelovek
Проще всего – прибавить 32 к каждому значению. Так гарантированно будет вывод, и соответствие останется линейным. Единственный минус – получающиеся символы не будут буквами и их будет сложно читать. Если хочешь, чтобы шифр выдавал осмысленные буквы, придётся подкрутить веса штрихов, чтобы пятибитные числа попадали в диапазон 32–122, а потом сопоставлять их с A–Z или a–z, как потребуется. Если нужна просто скрытие данных, то сдвиг в 32 вполне подходит и его легко реализовать. Он сохраняет и уникальность, и однозначность соответствия. Если тебя устраивает вывод в смешанном регистре – делай как хочешь. Если нужен читаемый текст – подкорректируй значения, чтобы исходные десятичные числа сразу попадали в диапазон печатаемых символов.
RuneCaster RuneCaster
Я просто сдвину все результаты на 32 единицы, и хватит на сегодня. Шифр останется линейным, уникальность сохранится, и ты сможешь просто вставить это в лог-файл. Если тебе нужен более понятный слоган, я могу подкорректировать толщину штрихов, чтобы базовые биты попадали в диапазон от 32 до 122, а потом применить соответствие A-Z. Иначе, вывод в смешанном регистре будет таким же загадочным, как древняя руна. Какой вариант выбираешь?