Я работаю с атакой в середине встречи на 2DES.Я реализовал шифрование / дешифрование DES, и оно работает.Я пытаюсь достичь этого путем сохранения в цикле for промежуточных шифров в качестве ключа HashMap и возможных ключей в качестве значений HashMap.Оба в виде целых чисел - начались с byte [], но выяснили, что ключ не может быть массивом.Однако в этом цикле for я также хочу убедиться, что возможные ключи уникальны, т.е. у меня есть цикл while, который гарантирует, что размер HashMap равен 2 ^ 20 (эффективны только 20 бит ключа DES).Затем я пытаюсь найти ключи, которые имеют соответствующий текст промежуточного шифра, перебирая HashMap с foreach, и сравниваю каждый текст промежуточного шифра из шифров с текстом промежуточного шифра из расшифровок.
Однако яЯ не могу найти совпадение, так как это занимает слишком много времени, чтобы закончить.Я ждал около 20 минут без какого-либо результата.
while (intermediateCipher.size() < Math.pow(2, 20)) {
byte[] key = generateDesKey();
intermediateCipher.put(ByteBuffer.wrap(encrypt(key, plainText)).getInt() , ByteBuffer.wrap(key).getInt());
}
int count = 0;
for (Entry<Integer, Integer> arr : intermediateCipher.entrySet()) {
byte[] k2 = ByteBuffer.allocate(8).putInt(arr.getValue()).array();
int temp = ByteBuffer.wrap(decrypt(k2, cipherText2)).getInt();
if (intermediateCipher.containsKey(temp)) {
count++;
byte[] k1 = ByteBuffer.allocate(8).putInt(intermediateCipher.get(temp)).array();
if (encrypt(k2, encrypt(k1, plainText)) == cipherText2) {
System.out.println("Key is " + k1 + " " + k2);
}
}
}
промежуточный шифр - это мой хэш-карта.
PlainText - это байт [] из 8 байтов, cipherText2 - это результат шифрования 2DES наplainText и generateDesKey - это метод, который генерирует 64 бита, где биты четности пропускаются, чтобы убедиться в эффективности 20 битов, и преобразовать биты в байт [], поскольку DES требует, чтобы