Если у меня есть известные пары открытого текста и зашифрованного текста и 2 неизвестных ключа длиной 24 бита. (Предположим, что метод шифрования неизвестен)
9acb0442f0c5341e 035a85c5772da926
aa209b8e700e0976 f1849958b47fec38
6cb50b02afd3a30c 4e48ca11ee429960
10cd96722811a558 0a18dd10a6b31c5c
18d2fe904d088f48 f84950f2d18dc4e8
83e4f98dd04ab55f 4dc9a896a1dd3a99
36d9ff456172bfe3 ea626b82da337f24
516c42b078092a35 05d5757be9fca1e7
Первый ключ шифрует первый столбец, а второй ключ шифрует результат для получения второго столбца. Как найти правильную пару ключей?
Перебор 2 ^ 48 должен быть невозможен, поэтому мой оригинальный цикл for не будет работать
for (int i = 0; i < 16777216; i++) // 16777216 равно 2^24, а i соответствует первому ключу
{
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:");
printKeyPair(i, j); // если совпадение найдено выводим ключи i, j
}
}
}
Моя идея состояла в том, чтобы дважды зашифровать первый столбец, пока я не получу второй столбец, но я не уверен, как это сделать не более чем за 2 ^ 25 итераций.