Codebreakers và Codewriters


18

Giả sử bạn có một số văn bản và bạn muốn nó gửi cho bạn của bạn, nhưng bạn không muốn ai khác đọc nó. Điều đó có thể có nghĩa là bạn muốn mã hóa nó để chỉ bạn và bạn của bạn có thể đọc nó. Nhưng, có một vấn đề: bạn và bạn của bạn đã quên đồng ý về phương thức mã hóa, vì vậy nếu bạn gửi tin nhắn cho họ, họ sẽ không thể giải mã được!

Sau khi suy nghĩ về điều này một lúc, bạn quyết định chỉ gửi cho bạn bè mã để mã hóa tin nhắn của bạn cùng với tin nhắn. Bạn của bạn rất thông minh, vì vậy họ có thể tìm ra cách giải mã tin nhắn bằng cách nghiên cứu phương pháp mã hóa.

Tất nhiên, vì những người khác có thể đang đọc tin nhắn, bạn muốn chọn một sơ đồ mã hóa khiến nó khó bị bẻ khóa nhất (tìm ra sơ đồ giải mã).

Nhiệm vụ của cảnh sát

Trong thử thách này, Cops sẽ đóng vai trò của người viết: bạn sẽ thiết kế một sơ đồ mã hóa để chuyển đổi chuỗi thành chuỗi. Tuy nhiên, sơ đồ mã hóa này phải là tính từ , nghĩa là không có hai chuỗi phải ánh xạ sang một chuỗi khác và mọi chuỗi có thể được ánh xạ tới bởi một đầu vào. Nó chỉ mất một đầu vào mà chuỗi được mã hóa.

Sau đó, bạn sẽ đăng một số mã thực hiện mã hóa và một tin nhắn được mã hóa với lược đồ được mã hóa chi tiết.

Vì bạn đang trả bằng byte để gửi tin nhắn, điểm của bạn sẽ là độ dài mã của bạn cộng với độ dài của bản mã . Nếu câu trả lời của bạn bị bẻ khóa, bạn sẽ có điểm vô cùng.

Sau một tuần, bạn có thể tiết lộ văn bản và đánh dấu câu trả lời của bạn là An toàn . Câu trả lời an toàn là những câu hỏi không thể bị bẻ khóa.

Nhiệm vụ của bọn cướp

Những tên cướp sẽ đóng vai trò là bạn của nhà văn hoặc người trung gian độc hại (không có sự khác biệt về vật chất, nhưng bạn có thể nhập vai như thể điều đó làm cho nó thú vị hơn khi làm như vậy). Họ sẽ lấy các sơ đồ mã hóa và bản mã và cố gắng tìm ra thông điệp được mã hóa. Một khi họ tìm ra tin nhắn được mã hóa, họ sẽ đăng nó trong một bình luận. (Sẽ không có chủ đề riêng của tên cướp cho câu hỏi này.)

Người chiến thắng sẽ là kẻ cướp có nhiều vết nứt nhất.


Dưới đây là một ví dụ về hình thức của giải pháp bẻ khóa:

Mua thêm cam


Nếu mã hóa là tính từ, tên miền và tên miền là gì?
Leaky Nun

Các chuỗi với các ký tự?
Nữ tu bị rò rỉ

1
@WheatWizard nào 256? Ý bạn là 256 byte không phải ký tự phải không?
Erik các Outgolfer

7
Điều gì để ngăn ai đó sử dụng chức năng bảo mật bằng mật mã?
Người hướng dẫn

2
Ai là gánh nặng của việc chứng minh tính chất sinh học: cảnh sát hay kẻ cướp tiềm năng? Tức là, nếu không biết nếu một chức năng là sinh học, điều gì xảy ra?
Stephen

Câu trả lời:


5

Jelly , 57 + 32 = 89 byte ( đã bẻ khóa )

“¡ḟċ⁷Ḣṡ⁵ĊnɠñḂƇLƒg⁺QfȥẒṾ⁹+=?JṚWġ%Aȧ’
O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ

Tin nhắn được mã hóa:

EªæBsÊ$ʳ¢?r×­Q4e²?ò[Ý6

Là một chuỗi hex:

4518AAE6421973CA
9724CAB3A23F72D7
AD18855134651810
B23F1CF25BDD9036

Giải trình:

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

Trường hợp Nđược mã hóa bởi chuỗi “¡ḟċ⁷Ḣṡ⁵ĊnɠñḂƇLƒg⁺QfȥẒṾ⁹+=?JṚWġ%Aȧ’, đó là số 105587021056759938494595233483151378724567978408381355454441180598980268016731.

Ngoài ra, đây là phương pháp RSA với Nở trên và khóa chung 21. Bẻ khóa này tương đương với việc tìm ra hai yếu tố chính của N.


Tốt. Tôi có thể giải mã tin nhắn được mã hóa của riêng mình bằng khóa tôi đã tìm thấy, nhưng dường như nó không thành công với bạn. : - / (Kết quả dự kiến ​​không phải là một tin nhắn không phải tiếng Anh gồm 4 ký tự, phải không?)
Arnauld

3
Thông báo là _ìNb( Hãy thử trực tuyến! ).
Anders Kaseorg

@AndersKaseorg Yup. Đó là những gì tôi đã có, nhưng tôi đang mong đợi một cái gì đó có ý nghĩa hơn một chút. :-)
Arnauld

1
Đối với những gì nó có giá trị, đây là mã tôi đã sử dụng về phía tôi.
Arnauld

1
@AndersKaseorg Jelly cố gắng đánh giá các đối số của nó, vì vậy các byte null thực sự có thể. tio.run/##y0rNyan8/9//////6jEGIKgOAA
Dennis

5

Jelly , 88 + 64 = 152 byte

Chức năng mã hóa:

“¥@ɦ⁺€€Ṅ`yȤDƁWĊ;Y^y⁻U ⁸ßɠƁXẹṡWZc'µ÷ḷỊ0ÇtṙA×Ḃß4©qV)iḷỊDƭ Mṛ+<ṛ_idðD’
O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ

Tin nhắn được mã hóa:

AX!?ÖÍL¹    JÓ°û0àah4Û{µÌá`
^tÝrRÕù#êwðãTÓK"Íû´Ëß!øòOf«

Là một chuỗi hex:

9F419458213FD6CD4CB9094A10D3B0FB
8F30E0616834DB7BB517CCE1600A5E74
DD7252D5F923EA77F0E354D34B9F22CD
FB80B4CBDF21F80E94F24F9A66AB9112

Giải trình:

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

Trường hợp Nđược mã hóa bởi chuỗi:

“¥@ɦ⁺€€Ṅ`yȤDƁWĊ;Y^y⁻U ⁸ßɠƁXẹṡWZc'µ÷ḷỊ0ÇtṙA×Ḃß4©qV)iḷỊDƭ Mṛ+<ṛ_idðD’

đó là số

15465347049748408180402050551405372385300458901874153987195606642192077081674726470827949979631079014102900173229117045997489671500506945449681040725068819

Ngoài ra, đây là phương pháp RSA với Nở trên và khóa chung 13. Bẻ khóa này tương đương với việc tìm hai yếu tố chính N, có 512 bit.


2
Tôi thích rằng chuỗi được mã hóa của bạn trông giống như mã của bạn
Skidsdev

Sử dụng chương trình tuyệt vời này , tôi chắc chắn rằng tôi có thể phá vỡ giải pháp của bạn vài thiên niên kỷ sau cái chết nóng của vũ trụ.
Phượng hoàng Socratic

@SocPPenix yếu tố phân chia theo thử nghiệm không bao giờ có thể đến gần sàng bậc hai.
Rò rỉ Nun

@LeakyNun Tôi không hiểu những từ toán học lớn của bạn ...
Socratic Phoenix

@SocPhoenix chương trình của bạn thử từng yếu tố từ 2, trong khi sàng bậc hai nhanh hơn nhiều. Nó có thể tạo ra một bán kết 256 bit trong 6 phút, trong khi chương trình của bạn sẽ mất một thời gian.
Rò rỉ Nun

3

JavaScript (ES6), 43 + 33 = 76 byte Cracked bởi Leaky Nun

Chức năng mã hóa, 43 byte:

s=>[...s].sort(_=>Math.cos(i++),i=0).join``

Tin nhắn được mã hóa, 33 byte:

NB: Phương pháp mã hóa này phụ thuộc vào trình duyệt.

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
Rò rỉ Nun

@LeakyNun Err ... không.
Arnauld

Thay vào đó, câu trả lời của tôi tạo ra điều gì?
Leaky Nun

Trình duyệt mà bạn đang sử dụng? Tôi đang sử dụng Chrome.
Rò rỉ Nun

6
That was soooo easy to crack! -;)(Tôi đã sử dụng firefox để bẻ khóa nó)
Leaky Nun

3

Braingolf, nứt

(d1&,&g)&@

Hãy thử trực tuyến!

Tin nhắn được mã hóa, 45 byte (UTF-8)

°Áݭїϳ{ًչםק{їϳэÁק{|э³קѡ|

Mã hóa tin nhắn được mã hóa

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

Tin nhắn được giải mã

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

Giải trình

(d1&,&g)&@  Implicit input from commandline args
(......)    Foreach loop, foreach codepoint of input
 d          Split into digits
  1         Push 1
   &,       Reverse
     &g     Concatenate
        &@  Print

Bộ giải mã

Một bộ giải mã có thể được thực hiện bằng cách chỉ thay đổi 3 ký tự. Đơn giản chỉ cần loại bỏ các 1, và chèn $_Inbetween &,&g

(d&,$_&g)&@

Bạn có thể cung cấp một TIO?
Kritixi Lithos

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

@KSmarts Đúng!
Skidsdev

gkhông có giấy tờ?
Rò rỉ Nun

Đây có phải là tính từ?
Leaky Nun

3

JavaScript (ES6), 96 + 9 = 105 byte

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))

Bản mã (mã hóa hex): 7d111c74b99faff76a

Hãy thử trực tuyến!

Đầu ra mẫu (sử dụng động cơ V8):

abc123 -> db48ea4f86b9

Xin chào -> 1b3420f5ab


Gửi không hợp lệ: nhiều bản rõ tạo cùng một bản mã. Ví dụ: "C", "D". Điều này chỉ tính cho char đầu tiên. Trong số 256 đầu vào có thể, chỉ có 165 đầu ra duy nhất.
Mark Jeronimus

Đây là tính từ cho phạm vi dự định (ASCII A đến ASCII z)
iovoid

Tôi chỉ nói với bạn là không. Chỉ cần thử mã của bạn với "C" và "D" tương ứng làm chuỗi đầu vào. Chuỗi đầu ra giống nhau 76.
Mark Jeronimus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.