Score:0

แคร็กแพดแบบใช้ครั้งเดียวโดยใช้คีย์ซ้ำ

ธง cn

มีแผ่นเวลาเดียวซึ่งทำงานดังนี้: ได้รับข้อความ "สวัสดี" และคีย์ "asdfg" มันสร้าง "hwoqu" ใช้ได้กับตัวอักษรภาษาอังกฤษ 26 ตัวเท่านั้น ผลลัพธ์คือ (h(7) + a(0))%26 = h(7), (e(4) + s(18))%26 = w(22) เป็นต้น

ดังนั้นฉันจึงมีข้อความเข้ารหัสสองรายการที่สร้างขึ้นตามด้านบนโดยใช้คีย์เดียวสำหรับข้อความเข้ารหัสทั้งสอง ฉันควรจะสามารถถอดรหัสข้อความธรรมดาโดยไม่จำเป็นต้องเข้าถึงคีย์

ขั้นตอนในการทำเช่นนี้คืออะไร?

จนถึงตอนนี้ ฉันได้ลอง XORing ข้อความรหัสสองตัว เช่น สำหรับตัวอักษรแต่ละตัวใน c1 และ c2 ให้แปลงเป็นค่าตัวเลขที่สอดคล้องกัน และ XOR ตัวอักษรตัวที่ n ของ c1 ด้วยตัวอักษรตัวที่ n ของ c2 เพื่อสร้าง c3

ฉันควรใช้สิ่งนั้นกับคำเดาเช่น "the" โดย exoring กับ c3นี่คือส่วนที่ฉันติดอยู่ ฉันไม่รู้ว่าฉันควรจะมองหาอะไรที่นี่

แก้ไข:

เนื่องจากเป็นการเพิ่มมากกว่า XOR นี่คือสิ่งที่ฉันเขียน:

c1 = "ujhantamawmuzvgkterrykub"
c2 = "bpgxmkymbbpyxmogoehdefgh"

แผ่นเข้ารหัสและถอดรหัส:

def oneTimePad (ข้อความ รหัส):
    message_out = ""
    สำหรับฉันในช่วง (len (ข้อความ)):
        
        ดัชนี = (letters.find(ข้อความ[i]) + letter.find(code[i]))%26
        message_out+= ตัวอักษร[ดัชนี]

    ส่งคืน message_out

def otpDecrypt (รหัส, คีย์):
    message_out = ""

    สำหรับฉันในช่วง (len (คีย์)):
        ดัชนี = (letters.find(cipher[i]) - letter.find(key[i]))%26
        message_out+= ตัวอักษร[ดัชนี]
    ส่งคืน message_out

แครกเกอร์:

def padCracker(m1, m2, เดา): # m1, m2 รายการตัวเลข
    m3 = รายการ(แผนที่(แลมบ์ดา x, y: (x + y) %26, m1, m2))
    ตรวจสอบ = [] # m3 + เดา mod 26
    GuessNum = รายการ (แผนที่ (แลมบ์ดา c : ตัวอักษร. ค้นหา (c), เดา))
    สำหรับผมในช่วง(len(m3)-len(เดา)+1):
        ตรวจสอบ = รายการ (แผนที่ (แลมบ์ดา x, y: (x+y)%26, GuessNum, m3[i: i+len(เดา)]))
        พิมพ์(กาเครื่องหมาย, สิ้นสุด="")
        
        สตริง = ""
        สำหรับจำนวนในการตรวจสอบ:
            สตริง += ตัวอักษร[จำนวน]

        พิมพ์ (สตริง)       


พิมพ์ (padCracker (m1,m2, "bcd"))

สิ่งนี้ชี้ให้เห็นว่า c1 เริ่มต้นด้วย "the" และ c2 ด้วย "และ" ด้วยคีย์ "bcd" แต่ฉันไม่รู้ว่าจะรับคีย์ที่เหลือได้อย่างไร

SAI Peregrinus avatar
si flag
คำแนะนำ: การเข้ารหัสใช้ XOR หรือไม่ มันใช้อะไร? สิ่งนี้เกี่ยวข้องกับไซเฟอร์เท็กซ์อย่างไร
Shiny_and_Chrome avatar
cn flag
ฉันคิดว่านี่ไม่ได้ใช้ XOR จริงๆ มันเพียงแค่เพิ่มคีย์และตัวอักษรธรรมดาเช่นเดียวกับรหัส vigenere ดังนั้น ขั้นตอนในการเลิกทำรหัส vigenere คืออะไร และฉันจะใช้ความสัมพันธ์ระหว่าง c1 และ c2 เพื่อให้ได้ข้อความธรรมดาได้อย่างไร
SAI Peregrinus avatar
si flag
มันเพิ่มตัวอักษรคีย์สตรีมและตัวอักษรธรรมดา mod 26 การถอดรหัสเหมือนกัน ความสัมพันธ์ในการโจมตีสองครั้งตามปกติ (เช่น การลากเปล) คือการเพิ่ม ciphertexts mod 26 -key-reuse มีคำตอบที่ดีหลายประการ
Shiny_and_Chrome avatar
cn flag
ขอบคุณนั่นช่วยได้มาก ดังนั้นฉันจึงเพิ่มตัวอักษรของข้อความเข้ารหัสทั้งสองเพราะนั่นคือสิ่งที่ทำระหว่างการเข้ารหัส ในขณะที่ถ้ามันถูก XORed ฉันก็จะใส่ XOR ของข้อความเข้ารหัสทั้งสองด้วย ถ้าฉันเข้าใจการลากเปลอย่างถูกต้อง ฉันจะเดาคำเช่น "the" หรือ "and" หรือ "have" แปลงเป็นค่าตัวเลข จากนั้นเพิ่มตัวอักษรแต่ละตัวในตัวอักษรที่เกี่ยวข้องใน c3 หากผลลัพธ์เป็นสิ่งที่อ่านได้ จากนั้นนั่นทำให้ฉันสามารถเดาคำที่เป็นไปได้อีกคำหนึ่งเพื่อสร้างข้อความว่าคืออะไร
SAI Peregrinus avatar
si flag
ใช่. โดยพื้นฐานแล้วจะเป็น OTP เดียวกันกับปกติ เพียงแค่มี XOR บนบิตแทนที่ด้วยการเพิ่ม mod 26 ในตัวอักษรภาษาอังกฤษ
Shiny_and_Chrome avatar
cn flag
ฉันยังไม่สามารถทำให้ไอ้เวรนั่นทำงานได้ ฉันทำ c3 = (c1+c2) % 26 แล้ว (c + เดา) % 26 แต่ไม่รู้ว่าจะไปจากตรงไหน สิ่งเปลทั้งหมดไม่ได้คลิก ฉันได้อัปเดตโพสต์ต้นฉบับของฉันเพื่อแสดงสิ่งที่ฉันพยายาม

โพสต์คำตอบ

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