Я хочу создать коллекцию, которую можно использовать для поиска совпадений среди значений.Как вы правильно знаете, восстановление ключа для Double DES занимает три шага.Наличие открытого текста и зашифрованного текста:
- Шифрование открытого текста всеми 2 ^ 56 возможными ключами и сохранение результатов
- Расшифровка зашифрованного текста всеми 2 ^ 56 возможными ключами и сохранениерезультаты
- Проверка совпадения результатов для извлечения ключа
Что я пытаюсь сделать: в настоящее время я работаю с атакой "Встреча в середине" на Double DES, и яЯ пришел к точке, где я должен зашифровать / дешифровать открытый текст / зашифрованный текст 2 ^ 56 раз и сохранить результаты, чтобы найти совпадения.
Прямо сейчас я сохранил результаты в двух HashMaps
, где я храню используемый ключ и результат шифрования / дешифрования.Однако я не могу понять, как я могу сравнить результаты двух HashMaps
и затем решить, какие ключи были использованы.
Итак, моя вторая идея, возможно, заключается в использовании ListMultimap
вместоЯ могу сохранить результаты шифрования / дешифрования с использованным ключом, но опять же, я не знаю, как найти совпадения.Совпадения не обязательно находятся в одной строке.
РЕДАКТИРОВАТЬ:
Я попробовал с двумя HashMaps, но у меня ничего не получилось, т.е. я не смог сравнить Карты
for (int i = 0; i < Math.pow(2, 20); i++) {
for (int j = 0; j < Math.pow(2, 20); j++) {
if(hmap1.values().toArray()[i].equals(hmap2.values().toArray()[j]) )
System.out.println(hmap1.keySet().toArray()[i] + " = " + hmap2.keySet().toArray()[i] );
}
}
Я забыл упомянуть, что ради тестирования я работаю с ключами, которые имеют 20 эффективных битов.Таким образом, будет 2 ^ 20 возможных ключей
Я также забыл упомянуть, что содержат мои HashMaps.Они содержат два байтовых массива static Map<byte[], byte[]> hmap1 = new HashMap<byte[], byte[]>();
, где первый байтовый массив содержит возможный ключ, а второй массив содержит результат шифрования / дешифрования