코드 브레이커 및 코드 라이터


18

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

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

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

경찰의 임무

이 도전에서 경찰은 작가의 역할을 수행합니다. 문자열을 문자열로 변환하는 암호화 체계를 설계하게됩니다. 그러나이 암호화 체계 bijective 이어야합니다 . 즉, 두 문자열이 다른 문자열에 매핑되지 않아야하며 모든 문자열은 입력으로 매핑 될 수 있습니다. 인코딩 할 문자열은 하나만 입력해야합니다.

그런 다음 암호화를 수행하는 코드와 코드에 의해 설명 된 체계로 암호화 된 단일 메시지를 게시합니다.

바이트를 사용하여 메시지를 보내므로 점수는 코드 길이에 암호 텍스트 길이를 더한 것 입니다. 답이 깨지면 무한 점수를 얻게됩니다.

일주일 후 텍스트를 공개하고 답변을 안전으로 표시 할 수 있습니다 . 안전한 답변은 깨질 수없는 답변입니다.

강도의 임무

강도는 작가의 친구 나 악의적 인 중개인으로 활동합니다 (물질적 차이는 없지만 역할을 더 즐겁게하는 것처럼 역할극을 할 수 있습니다). 그들은 암호화 체계와 암호문을 가지고 암호화 된 메시지를 알아 내려고 시도 할 것입니다. 암호화 된 메시지를 알아 낸 후에는 주석에 메시지를 게시합니다. (이 질문에 대해서는 별도의 강도 스레드가 없습니다.)

승자는 균열이 가장 많은 강도입니다.


깨진 솔루션의 예는 다음과 같습니다.

더 오렌지 구매


인코딩이 형용사 인 경우 도메인과 공동 도메인은 무엇입니까?
Leaky Nun

어떤 문자와 함께 문자열?
Leaky Nun

1
@WheatWizard 어느 256? 문자가 아닌 256 바이트를 의미 합니까?
에릭 Outgolfer

7
누군가가 암호로 안전한 기능을 사용하지 못하게하려면 어떻게해야합니까?
Tutleman

2
경찰이나 잠재적 인 강도 : 형용사 증명의 부담은 누구입니까? 즉, 함수가 bijective인지 알 수없는 경우 어떻게됩니까?
Stephen

답변:


5

젤리 , 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.


잘. 찾은 키를 사용하여 암호화 된 메시지를 해독 할 수 있지만 실패합니다. :-/ (예상 결과는 영어가 아닌 4 글자가 아닌 메시지입니다.)
Arnauld

3
메시지는 _ìNb( 온라인으로 시도하십시오! )입니다.
Anders Kaseorg

@AndersKaseorg Yup. 그것이 제가 가진 것이지만, 조금 더 의미있는 것을 기대하고있었습니다. :-)
Arnauld

1
가치있는 것을 위해 여기 에 내가 사용했던 코드가 있습니다.
Arnauld

1
@AndersKaseorg Jelly는 인수의 평가를 시도하므로 null 바이트가 실제로 가능합니다. tio.run/##y0rNyan8/9//////6jEGIKgOAA
Dennis

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«

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 비트를 갖는 의 두 가지 주요 요소를 찾는 것과 같습니다 .


2
암호화 된 문자열이 코드처럼 보입니다.
Skidsdev

이 훌륭한 프로그램을 사용 하면 우주의 열사병 후 몇 천 년 동안 당신의 해결책을 깨뜨릴 수 있다고 확신합니다.
Socratic Phoenix

시험 분할에 의한 @SocraticPhoenix 인수 분해는 절대 2 차 체에 근접 할 수 없습니다.
Leaky Nun

@LeakyNun 나는 당신의 큰 수학 단어를 이해하지 못합니다 ...
Socratic Phoenix

@SocraticPhoenix 프로그램은 2의 각 요소를 시도하지만 2 차 체 는 훨씬 빠릅니다. 6 분 안에 256 비트 세미 프라임을 분해 할 수 있지만 프로그램은 영원 할 것입니다.
Leaky Nun

3

자바 스크립트 (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!)"

T! a)o khas eotrto-c; o sa cwsaoy
Leaky Nun

@LeakyNun Err ... 아니.
Arnauld

내 대답은 대신 무엇을 생산합니까?
Leaky Nun

어떤 브라우저를 사용하고 있습니까? Chrome을 사용하고 있습니다.
Leaky Nun

6
That was soooo easy to crack! -;)(나는 파이어 폭스를 사용하여 그것을 크래킹)
Leaky Nun

3

금이 간 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)&@

TIO를 제공 할 수 있습니까?
Kritixi Lithos

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

@KSmarts 맞아요!
Skidsdev

g미등록입니까?
Leaky Nun

이 형용사인가요?
Leaky Nun

3

자바 스크립트 (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


잘못된 제출 : 여러 일반 텍스트가 동일한 암호문을 생성합니다. 예를 들면 "C", "D"입니다. 이것은 첫 번째 문자에만 계산됩니다. 256 개의 가능한 입력 중 165 개의 고유 한 출력 만 있습니다.
Mark Jeronimus

의도 된 범위 (ASCII A에서 ASCII z까지)에 대해
형용사

난 그냥 당신이 아니라고 말했다. 입력 문자열로 각각 "C"와 "D"를 사용하여 코드를 시험해보십시오. 같은 출력 문자열 76.
Mark Jeronimus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.