【发布时间】:2018-11-21 18:54:15
【问题描述】:
我想创建一个集合,可用于查找值之间的匹配项。如您所知,恢复 Double DES 的密钥需要三个步骤。给出明文和密文:
- 使用所有 2^56 个可能的密钥加密明文并存储结果
- 使用所有 2^56 个可能的密钥解密密文并存储结果
- 检查结果匹配的位置以检索密钥
我正在尝试做的事情: 我目前正在对双 DES 进行中间相遇攻击,我已经达到了必须加密/解密明文/密文 2^56 次并存储结果以找到任何匹配项的地步。
现在,我将结果存储在两个HashMaps 中,其中存储了使用的密钥和加密/解密的结果。但是,我无法弄清楚如何比较两个 HashMaps 的结果,然后确定使用了哪些键。
所以,我的第二个想法可能是使用ListMultimap 代替我可以使用使用的密钥存储加密/解密结果的地方,但话又说回来,我不知道如何找到匹配项。匹配项不一定在同一行。
编辑:
我尝试使用我的两个 HashMap,但没有成功,即我无法比较地图
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 个可能的键
我也忘了提及我的 HashMap 包含的内容。它们包含两个字节数组static Map<byte[], byte[]> hmap1 = new HashMap<byte[], byte[]>();,其中第一个字节数组包含可能的密钥,第二个数组包含加密/解密的结果
【问题讨论】:
-
你需要一个循环而不是双循环。一个循环在第二个搜索中迭代一个哈希图。
-
你不存储#2的结果。
-
使用集合交集为here
-
@JamesKPolk:那我要如何找到解密的密钥呢?
-
很遗憾,您遗漏了有关实施的关键细节。你说你有 HashMaps 但你没有说什么是 HashMap 查找键及其值。由于您拥有 DES 密钥和 DES 加密结果,因此这很重要。
标签: java encryption collections hashmap