Dacă am un text simplu și perechi de text cifrat cunoscut și 2 chei necunoscute cu lungimea de 24 de biți. (Presupunem că metoda de criptare este necunoscută)
9acb0442f0c5341e 035a85c5772da926
aa209b8e700e0976 f1849958b47fec38
6cb50b02afd3a30c 4e48ca11ee429960
10cd96722811a558 0a18dd10a6b31c5c
18d2fe904d088f48 f84950f2d18dc4e8
83e4f98dd04ab55f 4dc9a896a1dd3a99
36d9ff456172bfe3 ea626b82da337f24
516c42b078092a35 05d5757be9fca1e7
Prima cheie criptează prima coloană, iar a doua cheie criptează rezultatul pentru a obține a doua coloană. Cum pot găsi perechea de chei corectă?
Forțarea brută 2^48 ar trebui să fie imposibilă, așa că bucla mea originală pentru nu va funcționa
pentru (int i = 0; i < 16777216; i++) // 16777216 este 2^24 și i este pentru prima cheie
{
for(int j = 0; j < 16777216; j++) // j este pentru a doua cheie
{
temp = doubleEncrypt(int i, int j, a.getPlaintext()); // stochează textul cifrat rezultat în temp
if(temp == a.getCiphertext() // verificați dacă ceea ce am primit se potrivește cu textul cifrat real
{
System.out.println("+ val+1 + "a-a pereche de chei este:");
printKeyPair(i, j); // dacă se găsește potrivire, tipăriți tastele i, j
}
}
}
Ideea mea a fost să criptez dubla prima coloană până când obțin a doua coloană, dar nu sunt sigur cum să fac asta în cel mult 2^25 de iterații.