Кодери та кодери


18

Скажімо, у вас є текст, і ви хочете, щоб він надіслав його своєму другові, але ви не хочете, щоб його читали інші. Це, ймовірно, означає, що ви хочете зашифрувати його, щоб читати його могли лише ви та ваш друг. Але є проблема: ви та ваш друг забули домовитися про метод шифрування, тому, якщо ви надішлете їм повідомлення, вони не зможуть його розшифрувати!

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

Звичайно, оскільки інші люди, можливо, читають повідомлення, ви хочете вибрати схему шифрування, яка робить її максимально важкою для розлому (з'ясуйте схему розшифровки).

Завдання копів

У цьому виклику Cops зіграють роль сценариста: ви розробите схему шифрування, яка перетворює рядки в рядки. Однак ця схема шифрування повинна бути біективною , це означає, що жоден два рядки не повинні відображатися в іншій рядку, і кожну рядок можна зіставити за допомогою введення. Він повинен зайняти лише один вхід - рядок, який потрібно закодувати.

Потім ви опублікуєте код, який виконує шифрування, і одне повідомлення, зашифроване за схемою, деталізованою вашим кодом.

Оскільки ви відправляєте байтом для надсилання повідомлень, вашим рахунком буде довжина вашого коду плюс довжина шифротексту . Якщо ваша відповідь зламається, у вас буде оцінка нескінченності.

Через тиждень ви можете розкрити текст і позначити свою відповідь безпечною . Безпечні відповіді - це ті, які неможливо зламати.

Завдання розбійників

Розбійники будуть грати або як друга письменника, або злісного середнього чоловіка (матеріальної різниці немає, але ви можете грати в ролі так, як якщо це зробить це веселіше). Вони візьмуть схеми шифрування та шифротекст та спробують розібрати зашифроване повідомлення. Після того, як вони з'ясують зашифроване повідомлення, вони опублікують його в коментарі. (Для цього питання не буде окремої нитки розбійників.)

Переможцем стане грабіжник з найбільшою тріщиною.


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

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


Якщо кодування бієктивне, що таке домен та кодомен?
Leaky Nun

Струни, з якими символами?
Leaky Nun

1
@WheatWizard Які 256? Ви маєте на увазі 256 байт, а не символи?
Ерік Аутгольфер

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.


Добре. Я в змозі розшифрувати власне зашифроване повідомлення за допомогою ключа, який я знайшов, але, здається, не вдається з вашим. : - / (Очікуваний результат - це не чотиризначне неанглійське повідомлення, чи не так?)
Арнольд

3
Повідомлення _ìNb( Спробуйте в Інтернеті! ).
Anders Kaseorg

@AndersKaseorg Yup Це я мав, але я очікував чогось більш значущого. :-)
Арнольд

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

Використовуючи цю чудову програму , я впевнений, що зможу зламати ваше рішення через пару тисячоліть після теплової смерті Всесвіту.
Сократичний Фенікс

@SocratPhoenix факторизація шляхом пробного поділу ніколи не може наблизитися до квадратичного сита.
Leaky Nun

@LeakyNun Я не розумію ваших великих математичних слів ...
Сократичний Фенікс

@SocratPhoenix ваша програма пробує кожен фактор із 2, тоді як квадратичне сито набагато швидше. Він може розподілити 256-бітну напівпроблему за 6 хвилин, тоді як ваша програма зайняла б вічність.
Leaky Nun

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
Leaky Nun

Помилка @LeakyNun ... ні.
Арнольд

Що замість цього дає моя відповідь?
Leaky Nun

Який браузер ви використовуєте? Я використовую Chrome.
Leaky Nun

6
That was soooo easy to crack! -;)(Я використовував firefox, щоб зламати його)
Leaky Nun

3

Braingolf, потрісканий

(d1&,&g)&@

Спробуйте в Інтернеті!

Зашифроване повідомлення, 45 байт (UTF-8)

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

Hexcodes зашифрованого повідомлення

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 Правильно!
Skidsdev

gє недокументованим?
Leaky Nun

Це бієктивність?
Leaky Nun

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.