텍스트가 있는데 친구에게 보내려고하지만 다른 사람이 읽지 않기를 원한다고 가정 해 봅시다. 아마 당신과 당신의 친구 만 읽을 수 있도록 암호화하고 싶다는 의미 일 것입니다. 그러나 문제가 있습니다. 귀하와 귀하의 친구는 암호화 방법에 동의하는 것을 잊어 버렸습니다. 메시지를 보내면 해독 할 수 없습니다!
이것에 대해 잠시 동안 생각한 후에, 메시지와 함께 메시지를 암호화하는 코드를 친구에게 보내면됩니다. 친구는 매우 영리하므로 암호화 방법을 연구하여 메시지를 해독하는 방법을 알아낼 수 있습니다.
물론 다른 사람들이 메시지를 읽고있을 가능성이 있기 때문에 크랙하기 어려운 암호화 체계를 선택하려고합니다 (암호 해독 체계를 그림 화).
경찰의 임무
이 도전에서 경찰은 작가의 역할을 수행합니다. 문자열을 문자열로 변환하는 암호화 체계를 설계하게됩니다. 그러나이 암호화 체계 는 bijective 이어야합니다 . 즉, 두 문자열이 다른 문자열에 매핑되지 않아야하며 모든 문자열은 입력으로 매핑 될 수 있습니다. 인코딩 할 문자열은 하나만 입력해야합니다.
그런 다음 암호화를 수행하는 코드와 코드에 의해 설명 된 체계로 암호화 된 단일 메시지를 게시합니다.
바이트를 사용하여 메시지를 보내므로 점수는 코드 길이에 암호 텍스트 길이를 더한 것 입니다. 답이 깨지면 무한 점수를 얻게됩니다.
일주일 후 텍스트를 공개하고 답변을 안전으로 표시 할 수 있습니다 . 안전한 답변은 깨질 수없는 답변입니다.
강도의 임무
강도는 작가의 친구 나 악의적 인 중개인으로 활동합니다 (물질적 차이는 없지만 역할을 더 즐겁게하는 것처럼 역할극을 할 수 있습니다). 그들은 암호화 체계와 암호문을 가지고 암호화 된 메시지를 알아 내려고 시도 할 것입니다. 암호화 된 메시지를 알아 낸 후에는 주석에 메시지를 게시합니다. (이 질문에 대해서는 별도의 강도 스레드가 없습니다.)
승자는 균열이 가장 많은 강도입니다.
깨진 솔루션의 예는 다음과 같습니다.
답변
젤리 , 57 + 32 = 89 바이트 ( 크랙 )
“¡ḟċ⁷Ḣṡ⁵ĊnɠñḂƇLƒg⁺QfȥẒṾ⁹+=?JṚWġ%Aȧ’
O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ
암호화 된 메시지 :
EªæBsÊ$ʳ¢?r×Q4e²?ò[Ý6
16 진 문자열로 :
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
.
또한 이것은 N
위에서 주어진 RSA 방법 과 공개 키 21
입니다. 크래킹은의 두 가지 주요 요소를 찾는 것과 같습니다 N
.
답변
젤리 , 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«
16 진 문자열로 :
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
또한 이것은 N
위에서 주어진 RSA 방법 과 공개 키 13
입니다. 이것을 크래킹 N
하는 것은 512 비트를 갖는 의 두 가지 주요 요소를 찾는 것과 같습니다 .
답변
자바 스크립트 (ES6) 43 + 33 = 76 바이트로 새는 수녀 금을
암호화 기능, 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!)"
답변
금이 간 Braingolf
(d1&,&g)&@
암호화 된 메시지, 45 바이트 (UTF-8)
°Áݭїϳ{ًչםק{їϳэÁק{|э³קѡ|
암호화 된 메시지의 16 진 코드
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
, 삽입 $_
inbetween &,
및&g
(d&,$_&g)&@
답변
자바 스크립트 (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))
암호문 (16 진 인코딩) : 7d111c74b99faff76a
샘플 출력 (V8 엔진 사용) :
abc123-> db48ea4f86b9
안녕하세요-> 1b3420f5ab