หากฉันมีคู่ข้อความธรรมดาและข้อความเข้ารหัสที่รู้จักและคีย์ที่ไม่รู้จัก 2 อันที่มีความยาว 24 บิต (สมมติว่าไม่ทราบวิธีการเข้ารหัส)
9acb0442f0c5341e 035a85c5772da926
aa209b8e700e0976 f1849958b47fec38
6cb50b02afd3a30c 4e48ca11ee429960
10cd96722811a558 0a18dd10a6b31c5c
18d2fe904d088f48 f84950f2d18dc4e8
83e4f98dd04ab55f 4dc9a896a1dd3a99
36d9ff456172bfe3 ea626b82da337f24
516c42b078092a35 05d5757be9fca1e7
คีย์แรกเข้ารหัสคอลัมน์แรกและคีย์ที่สองเข้ารหัสผลลัพธ์เพื่อให้ได้คอลัมน์ที่สอง ฉันจะหาคู่คีย์ที่ถูกต้องได้อย่างไร?
Bruteforcing 2^48 ไม่น่าจะเป็นไปได้ ดังนั้น for loop ต้นฉบับของฉันจะไม่ทำงาน
for (int i = 0; i < 16777216; i++) // 16777216 is 2^24 and i is for first key
{
for(int j = 0; j < 16777216; j++) // j เป็นคีย์ที่สอง
{
temp = doubleEncrypt(int i, int j, a.getPlaintext()); // เก็บข้อความรหัสผลลัพธ์ใน temp
if(temp == a.getCiphertext() // ตรวจสอบว่าสิ่งที่เราได้รับตรงกับข้อความรหัสจริงหรือไม่
{
System.out.println("คู่คีย์ " + val+1 + "th คือ:");
พิมพ์KeyPair(i, j); // หากพบการจับคู่พิมพ์คีย์ i, j
}
}
}
ความคิดของฉันคือเข้ารหัสคอลัมน์แรกเป็นสองเท่าจนกว่าฉันจะได้รับคอลัมน์ที่สอง แต่ฉันไม่แน่ใจว่าจะทำอย่างไรในการทำซ้ำไม่เกิน 2^25 ครั้ง