ผู้ถอดรหัสและถอดรหัส


18

สมมติว่าคุณมีข้อความและคุณต้องการให้ส่งไปให้เพื่อนของคุณ แต่คุณไม่ต้องการให้คนอื่นอ่าน นั่นอาจหมายความว่าคุณต้องการเข้ารหัสเพื่อให้มีเพียงคุณและเพื่อนของคุณเท่านั้นที่สามารถอ่านได้ แต่มีปัญหาคือคุณและเพื่อนของคุณลืมที่จะยอมรับวิธีการเข้ารหัสดังนั้นหากคุณส่งข้อความถึงพวกเขาพวกเขาจะไม่สามารถถอดรหัสได้!

หลังจากคิดถึงเรื่องนี้ไประยะหนึ่งแล้วคุณตัดสินใจที่จะส่งรหัสให้เพื่อนของคุณเพื่อเข้ารหัสข้อความของคุณพร้อมกับข้อความนั้น เพื่อนของคุณฉลาดมากดังนั้นพวกเขาจึงสามารถหาวิธีถอดรหัสข้อความได้โดยศึกษาวิธีการเข้ารหัส

แน่นอนเนื่องจากคนอื่นอาจอ่านข้อความคุณต้องการเลือกรูปแบบการเข้ารหัสที่ทำให้ยากที่สุดในการถอดรหัส (รูปแบบการถอดรหัส)

ภารกิจของตำรวจ

ในความท้าทายนี้ตำรวจจะเล่นบทบาทของนักเขียน: คุณจะออกแบบรูปแบบการเข้ารหัสที่แปลงสตริงเป็นสตริง อย่างไรก็ตามรูปแบบการเข้ารหัสนี้จะต้องbijectiveซึ่งหมายความว่าไม่มีสองสายที่ต้องแมปไปยังอีกสายหนึ่งและทุกสายสามารถแมปด้วยการป้อนข้อมูล จะต้องใช้เพียงหนึ่งอินพุต - สตริงที่จะเข้ารหัส

จากนั้นคุณจะโพสต์รหัสบางอย่างที่ทำการเข้ารหัสและข้อความเดียวที่เข้ารหัสด้วยรูปแบบที่รายละเอียดรหัสของคุณ

เนื่องจากคุณจะจ่ายเงินโดยไบต์กับข้อความที่ส่งคะแนนของคุณจะมีความยาวของรหัสของคุณบวกความยาวของ ciphertext หากคำตอบของคุณแตกคุณจะมีคะแนนอนันต์

หลังจากหนึ่งสัปดาห์คุณอาจเปิดเผยข้อความและทำเครื่องหมายคำตอบของคุณเป็นที่ปลอดภัย คำตอบที่ปลอดภัยคือคำตอบที่ไม่สามารถถอดรหัสได้

ภารกิจของโจร

โจรจะเล่นเป็นเพื่อนของนักเขียนหรือคนกลางที่เป็นอันตราย (ไม่มีความแตกต่างอย่างมีนัยสำคัญ แต่คุณสามารถสวมบทบาทเป็นถ้ามันทำให้สนุกมากขึ้นที่จะทำ) พวกเขาจะใช้รูปแบบการเข้ารหัสและข้อความและพยายามหาข้อความที่เข้ารหัส เมื่อพวกเขารู้ข้อความที่เข้ารหัสแล้วพวกเขาจะโพสต์ในความคิดเห็น (จะไม่มีเธรดโจรแยกต่างหากสำหรับคำถามนี้)

ผู้ชนะจะเป็นโจรที่มีรอยแตกมากที่สุด


นี่คือตัวอย่างของวิธีการแก้ไขปัญหารอยแตก

ซื้อส้มเพิ่มเติม


หากการเข้ารหัสเป็น bijective โดเมนและโดเมนคืออะไร
Leun Nun

สตริงที่ตัวละคร?
Leun Nun

1
@WheatWizard 256 คนไหน คุณหมายถึง 256 ไบต์ไม่ใช่อักขระใช่ไหม
Erik the 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

เป็นสตริงฐานสิบหก:

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 แคร็กนี้จะเทียบเท่ากับการหาสองปัจจัยที่สำคัญของ21N


ดี. ฉันสามารถถอดรหัสข้อความที่เข้ารหัสด้วยกุญแจที่ฉันพบ แต่ดูเหมือนว่าจะล้มเหลวกับคุณ : - / (ผลลัพธ์ที่คาดหวังไม่ใช่ข้อความที่ไม่ใช่ภาษาอังกฤษ 4 ตัวอักษรใช่มั้ย)
Arnauld

3
ข้อความคือ_ìNb( ลองออนไลน์! )
Anders Kaseorg

@AndersKaseorg Yup นั่นคือสิ่งที่ฉันมี แต่ฉันคาดหวังบางสิ่งที่มีความหมายมากกว่าเล็กน้อย :-)
Arnauld

1
สำหรับสิ่งที่คุ้มค่านี่คือรหัสที่ฉันใช้ด้านข้าง
Arnauld

1
@AndersKaseorg Jelly พยายามที่จะประเมินค่าอาร์กิวเมนต์ของมันดังนั้นไบต์ที่เป็นจริงจึงเป็นไปได้ 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«

เป็นสตริงฐานสิบหก:

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 13การแคร็กนี้เทียบเท่ากับการค้นหาสองปัจจัยหลักNซึ่งมี 512 บิต


2
ฉันชอบที่สตริงเข้ารหัสของคุณดูเหมือนรหัสของคุณ
Skidsdev

การใช้โปรแกรมที่ยอดเยี่ยมนี้ฉันแน่ใจว่าฉันสามารถแก้ปัญหาของคุณสองสามพันปีหลังจากการเสียชีวิตจากความร้อนของจักรวาล
Socratic ฟีนิกซ์

@ การแยกตัวประกอบแบบโซฟีนิกโดยแผนกทดลองไม่สามารถเข้าใกล้ตะแกรงกำลังสองได้
Leun Nun

@LeakyNun ฉันไม่เข้าใจคำศัพท์ทางคณิตศาสตร์ที่ยิ่งใหญ่ของคุณ ...
Socratic Phoenix

@SocialPhoenix โปรแกรมของคุณลองแต่ละปัจจัยจาก 2 ในขณะที่ตะแกรงกำลังสองจะเร็วกว่ามาก มันสามารถแยกเซมิโคลอน 256 บิตใน 6 นาทีในขณะที่โปรแกรมของคุณอาจใช้เวลาชั่วนิรันดร์
Leun Nun

3

JavaScript (ES6), 43 + 33 = 76 ไบต์แตกโดย Leaky Nun

ฟังก์ชั่นการเข้ารหัส 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
Leun Nun

@LeakyNun ผิดพลาด ... ไม่
Arnauld

คำตอบของฉันผลิตอะไรแทน
Leun Nun

คุณใช้เบราว์เซอร์ใดอยู่ ฉันกำลังใช้ Chrome
Leun Nun

6
That was soooo easy to crack! -;)(ฉันใช้ firefox เพื่อแคร็กมัน)
Leak Nun

3

Braingolf แตก

(d1&,&g)&@

ลองออนไลน์!

ข้อความที่เข้ารหัส 45 ไบต์ (UTF-8)

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

Hexcodes ของข้อความที่เข้ารหัส

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และใส่$_ระหว่าง&,และ&g

(d&,$_&g)&@

คุณสามารถให้ TIO ได้หรือไม่?
Kritixi Lithos

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

@ มาร์กถูกต้อง!
Skidsdev

gไม่มีเอกสาร?
Leun Nun

Bijective นี้หรือไม่
Leun Nun

3

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

Ciphertext (เข้ารหัสเป็นเลขฐานสิบหก): 7d111c74b99faff76a

ลองออนไลน์!

ตัวอย่างผลลัพธ์ (โดยใช้เครื่องยนต์ V8):

abc123 -> db48ea4f86b9

สวัสดี -> 1b3420f5ab


การส่งไม่ถูกต้อง: ข้อความธรรมดาหลายคำสร้าง ciphertext เดียวกัน ตัวอย่างเช่น: "C", "D" สิ่งนี้นับเฉพาะตัวแรก จาก 256 อินพุตที่เป็นไปได้มีเอาต์พุตเฉพาะ 165 รายการเท่านั้น
Mark Jeronimus

มันเป็น bijective สำหรับช่วงที่ต้องการ (ASCII A ถึง ASCII z)
iovoid

ฉันแค่บอกคุณว่ามันไม่ใช่ เพียงลองรหัสของคุณด้วย "C" และ "D" ตามลำดับเป็นสตริงที่ป้อน 76สตริงเอาท์พุทเดียวกัน
Mark Jeronimus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.