Powiedzmy, że masz jakiś tekst i chcesz, aby wysłał go znajomemu, ale nie chcesz, aby ktokolwiek go przeczytał. To prawdopodobnie oznacza, że chcesz go zaszyfrować, aby tylko Ty i Twój przyjaciel mogli go przeczytać. Ale jest problem: ty i twój przyjaciel zapomnieliście uzgodnić metodę szyfrowania, więc jeśli wyślesz im wiadomość, nie będzie w stanie jej odszyfrować!
Po zastanowieniu się przez chwilę postanawiasz po prostu wysłać znajomemu kod, aby zaszyfrować wiadomość wraz z wiadomością. Twój przyjaciel jest bardzo inteligentny, więc prawdopodobnie może dowiedzieć się, jak odszyfrować wiadomość, studiując metodę szyfrowania.
Oczywiście, ponieważ inne osoby mogą czytać wiadomość, należy wybrać schemat szyfrowania, który sprawia, że złamanie go jest jak najtrudniejsze (wymyśl schemat szyfrowania).
Zadanie gliniarzy
W tym wyzwaniu Cops zagra rolę pisarza: zaprojektujesz schemat szyfrowania, który konwertuje ciągi na ciągi. Jednak ten schemat szyfrowania musi być bijectywny , co oznacza, że żadne dwa ciągi nie muszą być odwzorowane na inny ciąg, a każdy ciąg może być odwzorowany na wejściu. Musi mieć tylko jedno wejście - ciąg znaków do zakodowania.
Następnie opublikujesz kod, który wykonuje szyfrowanie, oraz pojedynczą wiadomość zaszyfrowaną zgodnie ze schematem opisanym przez Twój kod.
Ponieważ płacisz bajtem za wysyłanie wiadomości, twój wynik będzie równy długości twojego kodu plus długości tekstu zaszyfrowanego . Jeśli twoja odpowiedź jest załamana, będziesz miał nieskończoność.
Po tygodniu możesz ujawnić tekst i oznaczyć odpowiedź jako Bezpieczną . Bezpieczne odpowiedzi to te, których nie można złamać.
Zadanie rabusiów
Rabusie grają albo jako przyjaciel pisarza, albo złośliwy środkowy człowiek (nie ma istotnej różnicy, ale możesz grać role, jeśli to sprawia, że jest to przyjemniejsze). Wezmą schematy szyfrowania i tekst zaszyfrowany i spróbują znaleźć zaszyfrowaną wiadomość. Gdy odkryją zaszyfrowaną wiadomość, opublikują ją w komentarzu. (Nie będzie osobnego wątku złodziei dla tego pytania).
Zwycięzcą zostanie rabuś z największą liczbą pęknięć.
Oto przykład, jak mogłoby wyglądać pęknięte rozwiązanie:
źródło
Odpowiedzi:
Galaretka , 57 + 32 = 89 bajtów ( popękana )
Zaszyfrowana wiadomość:
Jako ciąg szesnastkowy:
Wyjaśnienie:
Gdzie
N
jest zakodowany przez ciąg“¡ḟċ⁷Ḣṡ⁵ĊnɠñḂƇLƒg⁺QfȥẒṾ⁹+=?JṚWġ%Aȧ’
, który jest liczbą105587021056759938494595233483151378724567978408381355454441180598980268016731
.Jest to również metoda RSA z
N
podanym powyżej i kluczem publicznym21
. Złamanie tego jest równoznaczne ze znalezieniem dwóch głównych czynnikówN
.źródło
_ìNb
( Wypróbuj online! ).Galaretka , 88 + 64 = 152 bajty
Funkcja szyfrowania:
Zaszyfrowana wiadomość:
Jako ciąg szesnastkowy:
Wyjaśnienie:
Gdzie
N
jest zakodowany przez ciąg:która jest liczbą
Jest to również metoda RSA z
N
podanym powyżej i kluczem publicznym13
. Złamanie tego jest równoznaczne ze znalezieniem dwóch głównych czynnikówN
, które ma 512 bitów.źródło
JavaScript (ES6), 43 + 33 = 76 bajtów Cracked by Leaky Nun
Funkcja szyfrowania, 43 bajty:
Zaszyfrowana wiadomość, 33 bajty:
Uwaga: ta metoda szyfrowania zależy od przeglądarki.
źródło
T! a)o khas eotrto-c; o sa cwsaoy
That was soooo easy to crack! -;)
(Użyłem firefoxa, aby go złamać)Braingolf, Cracked
Wypróbuj online!
Zaszyfrowana wiadomość, 45 bajtów (UTF-8)
Hekskody zaszyfrowanej wiadomości
Odszyfrowana wiadomość
Wyjaśnienie
Dekoder
Dekoder można wykonać, zmieniając tylko 3 znaki. Wystarczy usunąć
1
i wstawić$_
pomiędzy&,
i&g
źródło
C'mon, this one's *easy*!
g
jest nieudokumentowane?JavaScript (ES6), 96 + 9 = 105 bajtów
Tekst zaszyfrowany (kodowany heksadecymalnie):
7d111c74b99faff76a
Wypróbuj online!
Przykładowe dane wyjściowe (przy użyciu silnika V8):
abc123 -> db48ea4f86b9
Cześć -> 1b3420f5ab
źródło
76
.