Взломщики кодов и составители кодов


18

Допустим, у вас есть какой-то текст, и вы хотите, чтобы он отправил его вашему другу, но вы не хотите, чтобы кто-то еще его читал. Это, вероятно, означает, что вы хотите зашифровать его, чтобы его могли прочитать только вы и ваш друг. Но есть проблема: вы и ваш друг забыли согласовать метод шифрования, поэтому, если вы отправите им сообщение, они не смогут его расшифровать!

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

Конечно, поскольку другие люди могут читать сообщение, вы хотите выбрать схему шифрования, которая сделает его максимально трудным для взлома (выясните схему дешифрования).

Задача ментов

В этом вызове копы будут играть роль автора: вы разработаете схему шифрования, которая преобразует строки в строки. Однако эта схема шифрования должна быть биективной , это означает, что никакие две строки не должны отображаться на другую строку, и каждая строка может быть сопоставлена ​​с помощью ввода. Требуется только один вход - строка для кодирования.

Затем вы опубликуете некоторый код, который выполняет шифрование, и одно сообщение, зашифрованное по схеме, детализированной вашим кодом.

Поскольку вы платите байтом за отправку сообщений, вашим счетом будет длина вашего кода плюс длина зашифрованного текста . Если ваш ответ взломан, у вас будет оценка бесконечности.

Через неделю вы можете раскрыть текст и пометить свой ответ как безопасный . Безопасные ответы - это те, которые невозможно взломать.

Задача грабителей

Грабители будут играть либо за друга писателя, либо за злого посредника (между ними нет существенной разницы, но вы можете сыграть роль так же, как если бы это делало это более увлекательным). Они возьмут схемы шифрования и зашифрованный текст и попытаются выяснить зашифрованное сообщение. Как только они выяснят зашифрованное сообщение, они опубликуют его в комментарии. (Для этого вопроса не будет отдельной ветки грабителей.)

Победителем станет грабитель с наибольшим количеством трещин.


Вот пример того, как может выглядеть взломанное решение:

Купить больше апельсинов


Если кодировка является биективной, каковы домен и кодомен?
Утренняя монахиня

Строки с какими персонажами?
Утренняя монахиня

1
@WheatWizard Какой 256? Вы имеете в виду 256 байтов, а не символы, верно?
Эрик Outgolfer

7
Что мешает кому-либо использовать криптографически безопасную функцию?
Тутлеман

2
На кого лежит бремя доказывания биективности: полицейский или потенциальные грабители? То есть, если неизвестно, является ли функция биективной, что происходит?
Стивен

Ответы:


5

Желе , 57 + 32 = 89 байт ( трещины )

“¡ḟċ⁷Ḣṡ⁵ĊnɠñḂƇLƒg⁺QfȥẒṾ⁹+=?JṚWġ%Aȧ’
O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ

Зашифрованное сообщение:

EªæBsÊ$ʳ¢?r×­Q4e²?ò[Ý6

В виде шестнадцатеричной строки:

4518AAE6421973CA
9724CAB3A23F72D7
AD18855134651810
B23F1CF25BDD9036

Объяснение:

O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ
O                     convert each into codepoint
 ‘ḅ256                convert from bijective base 256 to integer
      b¢              convert from integer to base N
        *21           map each to its 21th power
           %¢         modulo N
             ḅ¢       convert to integer from base N
               ḃ256’  convert from integer to bijective base 256
                    Ọ convert each from codepoint

Где Nкодируется строка “¡ḟċ⁷Ḣṡ⁵ĊnɠñḂƇLƒg⁺QfȥẒṾ⁹+=?JṚWġ%Aȧ’, которая является номером 105587021056759938494595233483151378724567978408381355454441180598980268016731.

Также это метод RSA с Nуказанным выше и открытым ключом 21. Взлом это эквивалентно нахождению двух основных факторов N.


Что ж. Я могу расшифровать свое собственное зашифрованное сообщение с помощью ключа, который я нашел, но, похоже, с вашим не получится. : - / (Ожидаемый результат - не 4-символьное неанглийское сообщение, не так ли?)
Арно


@AndersKaseorg Да. Это то, что у меня было, но я ожидал чего-то более значимого. :-)
Арно

1
Для чего это стоит, вот код, который я использовал на моей стороне.
Арно

1
@AndersKaseorg Jelly пытается оценить свои аргументы, поэтому нулевые байты действительно возможны. tio.run/##y0rNyan8/9//////6jEGIKgOAA
Деннис

5

Желе , 88 + 64 = 152 байта

Функция шифрования:

“¥@ɦ⁺€€Ṅ`yȤDƁWĊ;Y^y⁻U ⁸ßɠƁXẹṡWZc'µ÷ḷỊ0ÇtṙA×Ḃß4©qV)iḷỊDƭ Mṛ+<ṛ_idðD’
O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ

Зашифрованное сообщение:

AX!?ÖÍL¹    JÓ°û0àah4Û{µÌá`
^tÝrRÕù#êwðãTÓK"Íû´Ëß!øòOf«

В виде шестнадцатеричной строки:

9F419458213FD6CD4CB9094A10D3B0FB
8F30E0616834DB7BB517CCE1600A5E74
DD7252D5F923EA77F0E354D34B9F22CD
FB80B4CBDF21F80E94F24F9A66AB9112

Объяснение:

O‘ḅ256b¢*13%¢ḅ¢ḃ256’Ọ
O                     convert each into codepoint
 ‘ḅ256                convert from bijective base 256 to integer
      b¢              convert from integer to base N
        *13           map each to its 13th power
           %¢         modulo N
             ḅ¢       convert to integer from base N
               ḃ256’  convert from integer to bijective base 256
                    Ọ convert each from codepoint

Где Nкодируется строкой:

“¥@ɦ⁺€€Ṅ`yȤDƁWĊ;Y^y⁻U ⁸ßɠƁXẹṡWZc'µ÷ḷỊ0ÇtṙA×Ḃß4©qV)iḷỊDƭ Mṛ+<ṛ_idðD’

какой номер

15465347049748408180402050551405372385300458901874153987195606642192077081674726470827949979631079014102900173229117045997489671500506945449681040725068819

Также это метод RSA с Nуказанным выше и открытым ключом 13. Взлом это эквивалентно нахождению двух основных факторов N, который имеет 512 бит.


2
Мне нравится, что ваша зашифрованная строка выглядит как ваш код
Skidsdev

Используя эту замечательную программу , я уверен, что смогу взломать ваше решение через пару тысячелетий после тепловой смерти вселенной.
сократовский феникс

Факторизация @SocraticPhoenix методом деления проб никогда не может приблизиться к квадратичному сита.
Утренняя монахиня

@LeakyNun Я не понимаю твои большие математические слова ...
Сократов Феникс

@SocraticPhoenix ваша программа пробует каждый фактор из 2, в то время как квадратичное сито работает намного быстрее. Он может разложить 256-битный полупериод за 6 минут, тогда как ваша программа заняла бы целую вечность.
Утренняя монахиня

3

JavaScript (ES6), 43 + 33 = 76 байт. Автор: Leaky Nun

Функция шифрования, 43 байта:

s=>[...s].sort(_=>Math.cos(i++),i=0).join``

Зашифрованное сообщение, 33 байта:

Примечание: этот метод шифрования зависит от браузера.

FireFox: "ty a)s kaasoeocr!hTt; o s  -cwaoo"
Chrome : "oht aasoaoas   e)tosr;oky c!-cw T"
Edge   : "tskso ;- caroteoTha wa soo ay c!)"

T! a)o khas eotrto-c; o sa cwsaoy
Утренняя монахиня

@LeakyNun Err ... нет.
Арно

Что дает мой ответ вместо этого?
Дрянная монахиня

Какой браузер вы используете? Я использую Chrome.
Дрянная Монахиня

6
That was soooo easy to crack! -;)(Я использовал Firefox, чтобы взломать его)
Leaky Nun

3

Braingolf, треснувший

(d1&,&g)&@

Попробуйте онлайн!

Зашифрованное сообщение, 45 байт (UTF-8)

°Áݭїϳ{ًչםק{їϳэÁק{|э³קѡ|

Гекскоды зашифрованного сообщения

C2 B0 C3 81 DD AD D1 97 CF
B3 C2 90 7B D9 8B D5 B9 D7
9D D7 A7 7B D1 97 CF B3 D1
8D C3 81 D7 A7 7B 7C D1 8D
C2 B3 D7 A7 D1 A1 7C C2 85

Расшифрованное сообщение

C'mon, this one's *easy*!

объяснение

(d1&,&g)&@  Implicit input from commandline args
(......)    Foreach loop, foreach codepoint of input
 d          Split into digits
  1         Push 1
   &,       Reverse
     &g     Concatenate
        &@  Print

дешифратор

Декодер можно сделать, изменив только 3 символа. Просто удалите 1и вставьте $_между ними &,и&g

(d&,$_&g)&@

Можете ли вы предоставить TIO?
Kritixi Lithos

1
C'mon, this one's *easy*!
KSmarts

@KSmarts Правильно!
Скидсдев

gнедокументировано?
Утренняя монахиня

Это биективно?
Дрянная Монахиня

3

JavaScript (ES6), 96 + 9 = 105 байт

q=>Buffer(q).map((a,i,d)=>d[i-1]^Math.abs(1e16*Math.sin(d[i]+i))%255).sort((a,i)=>Math.tan(a*i))

Зашифрованный текст (в шестнадцатеричном формате): 7d111c74b99faff76a

Попробуйте онлайн!

Примеры выходных данных (с использованием двигателя V8):

abc123 -> db48ea4f86b9

Здравствуйте -> 1b3420f5ab


Неверная отправка: несколько открытых текстов генерируют один и тот же зашифрованный текст. Например: «C», «D». Это относится только к первому символу. Из 256 возможных входов только 165 уникальных выходов.
Марк Жеронимус

Биективно для предполагаемого диапазона (от ASCII A до ASCII z)
iovoid

Я только что сказал вам, что это не так. Просто попробуйте свой код с соответственно "C" и "D" в качестве входной строки. Та же строка вывода 76.
Марк Жеронимус
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.