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


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.