코드 브레이커 및 코드 라이터 보내면 해독 할 수

텍스트가 있는데 친구에게 보내려고하지만 다른 사람이 읽지 않기를 원한다고 가정 해 봅시다. 아마 당신과 당신의 친구 만 읽을 수 있도록 암호화하고 싶다는 의미 일 것입니다. 그러나 문제가 있습니다. 귀하와 귀하의 친구는 암호화 방법에 동의하는 것을 잊어 버렸습니다. 메시지를 보내면 해독 할 수 없습니다!

이것에 대해 잠시 동안 생각한 후에, 메시지와 함께 메시지를 암호화하는 코드를 친구에게 보내면됩니다. 친구는 매우 영리하므로 암호화 방법을 연구하여 메시지를 해독하는 방법을 알아낼 수 있습니다.

물론 다른 사람들이 메시지를 읽고있을 가능성이 있기 때문에 크랙하기 어려운 암호화 체계를 선택하려고합니다 (암호 해독 체계를 그림 화).

경찰의 임무

이 도전에서 경찰은 작가의 역할을 수행합니다. 문자열을 문자열로 변환하는 암호화 체계를 설계하게됩니다. 그러나이 암호화 체계 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