为什么在 for 循环中检查 HashMap 是否具有特定值需要很长时间才能执行?

2024-01-09

我正在研究 Double-DES 上的中间相遇攻击。我已经实现了 DES 加密/解密并完成了加密,现在我想对 Double-DES 执行 MITM 攻击以找到密钥。我尝试实现此目的的方法是在 for 循环中将中间密码存储为 HashMap 的键,并将可能的键存储为 HashMap 的值。然而,在这个 for 循环中,我还想确保可能的键是唯一的,即我有一个 if 语句,它检查可能的键是否已存在于 HashMap 中。如果没有,则使用它来加密明文并将密文和可能的密钥存储在 HashMap 中。之后,我尝试通过使用 foreach 迭代 HashMap 来找到具有匹配中间密文的密钥,并将加密中的每个中间密文与解密中的中间密文进行比较。

但是,我无法找到比赛,因为完成时间太长。我已经等了大约2个小时了,没有任何结果。如果我删除 if 语句,它会检查可能的键是否已在 HashMap 中,它会在大约 10 秒内完成。

for (int size = intermediateCipher.size(); size < Math.pow(2, 20); size++) { // intermediateCipher is my HashMap consisting of <String, byte[]>
    byte[] possibleKey = generateDesKey(); // generateDesKey generates a key of 64 bits
    if (!intermediateCipher.containsValue(possibleKey)) {
        intermediateCipher.put((encrypt(possibleKey, plainText)).toString(), possibleKey);
    }
}

int count = 0;
for (Entry<String, byte[]> arr : intermediateCipher.entrySet()) {

    String temp = (decrypt(arr.getValue(), cipherText)).toString();

    if (intermediateCipher.containsKey(temp)) {
        count++;
    }
}

值得一提的是,只有 20 位的 DES 密钥是有效的。这就是为什么有 2^20 个可能的键。此外,如果我没有 if 语句来检查可能的键是否已在 HashMap 中,我会得到 510 个匹配项,这太多了。

UPDATE:

我尝试使用 Set 来首先存储密钥,然后使用 Set 中的密钥进行加密等。但是,我尝试使用 while 循环,而不是使用从 0 到 2^20 迭代的 for,只要 Set 有元素,它就会检查迭代。然而,我已经尝试运行此方法超过 10 分钟,但没有任何结果。它永远不会脱离循环。

for (int i = 0; i < Math.pow(2, 20); i++) {
            possibleKeySet.add(generateDesKey());
        }
        System.out.println(possibleKeySet.size());

        for (int i = 0; i < possibleKeySet.size(); i++) {

            intermediateCipher.put((encrypt(possibleKeySet.iterator().next(), plainText)).toString(),
                    possibleKeySet.iterator().next());
        }

        System.out.println("ss " + intermediateCipher.size());

        int count = 0;
        for (Entry<String, byte[]> arr : intermediateCipher.entrySet()) {

            String temp = ((decrypt(arr.getValue(), cipherText)).toString());
            if (intermediateCipher.containsKey(temp)) {
                count++;
            }
        }

我读过,对于一个集合,hasNext() 对于非空集合总是返回 true。因此,我尝试过使用每个键,但是 hashMap 的大小永远不会与键集的大小相同,这对我来说没有意义,因为我使用了键集中的每个键:

for (int i = 0; i < Math.pow(2, 20); i++) {
            possibleKeySet.add(generateDesKey());
        }

        System.out.println(possibleKeySet.size());

        for (byte[] key : possibleKeySet) {
            intermediateCipher.put((encrypt(key, plainText)).toString(),
                    key);
        }

Map.containsValue() https://docs.oracle.com/javase/10/docs/api/java/util/Map.html#containsValue(java.lang.Object)当您盲目迭代所有地图值时,将会有一个线性时间。根据 javadoc 方法:

如果此映射将一个或多个键映射到指定值,则返回 true。更正式地说,当且仅当此映射包含至少一个到值 v 的映射且满足 Objects.equals(value, v) 时,才返回 true。对于大多数 Map 接口的实现来说,此操作可能需要与地图大小成线性关系的时间。

要利用哈希查找,您应该使用以下命令检查键Map.containsKey() https://docs.oracle.com/javase/10/docs/api/java/util/Map.html#containsKey(java.lang.Object):

if (!intermediateCipher.containsKey(possibleKey)) {
  ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 for 循环中检查 HashMap 是否具有特定值需要很长时间才能执行? 的相关文章

  • 解决错误:日志已在具有多个实例的atomikos中使用

    我仅在使用atomikos的实时服务器上遇到问题 在我的本地服务器上它工作得很好 我在服务器上面临的问题是 init 中出错 日志已在使用中 完整的异常堆栈跟踪 java lang RuntimeException Log already
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • 在浏览器中点击应用程序时播放框架挂起

    我正在 Play 中运行一个应用程序activator run 也许 5 次中有 3 次 它会挂起 当我去http localhost 9000 它就永远坐在那里旋转 我看到很多promise timed out错误也 我应该去哪里寻找这个
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • Java 页面爬行和解析之 Crawler4j 与 Jsoup

    我想获取页面的内容并提取其中的特定部分 据我所知 此类任务至少有两种解决方案 爬虫4j https github com yasserg crawler4j and Jsoup http jsoup org 它们都能够检索页面的内容并提取其
  • 如何在jsp代码中导入java库?

    我有以下jsp代码 我想添加 java io 等库 我怎样才能做到这一点
  • 为什么在连接两个字符串时 Python 比 C 更快?

    目前我想比较 Python 和 C 用来处理字符串的速度 我认为 C 应该比 Python 提供更好的性能 然而 我得到了完全相反的结果 这是 C 程序 include
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • Java中接口作为方法参数

    前几天去面试 被问到了这样的问题 问 反转链表 给出以下代码 public class ReverseList interface NodeList int getItem NodeList nextNode void reverse No
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 如何在 JFreeChart TimeSeries 图表上显示降雨指数和温度?

    目前 我的 TimeSeries 图表每 2 秒显示一个位置的温度 现在 如果我想每2秒显示一次降雨指数和温度 我该如何实现呢 这是我的代码 import testWeatherService TestWeatherTimeLapseSer
  • 检查 protobuf 消息 - 如何按名称获取字段值?

    我似乎无法找到一种方法来验证 protobuf 消息中字段的值 而无需显式调用其 getter 我看到周围的例子使用Descriptors FieldDescriptor实例到达消息映射内部 但它们要么基于迭代器 要么由字段号驱动 一旦我有
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • 正则表达式库基准

    我最近一直想知道正则表达式实现的性能 并且很难想出很多有用的信息 它很容易对浏览器 javascript 正则表达式性能进行基准测试 网上有很多工具 Chrome 和 Opera 中的 javascript 正则表达式实现几乎摧毁了所有其他
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item

随机推荐

  • 使用 ImageDataGenerator 时的 Keras 分割训练测试集

    我有一个目录 其中包含图像的子文件夹 根据标签 我想在 Keras 中使用 ImageDataGenerator 时将这些数据拆分为训练集和测试集 虽然 keras 中的 model fit 有用于指定分割的参数validation spl
  • 一级缓存和二级缓存有什么区别?

    我知道l1和l2缓存是多级缓存中的级别 我想知道每一级缓存放置在哪里 以及允许的最大缓存级别是多少 这两者都取决于CPU 有些CPU根本没有高速缓存 有些CPU在芯片上有L1高速缓存 而L2高速缓存在同一芯片上的单独芯片上 甚至在单独的芯片
  • 如何将图像文件保存在 Postgres 数据库上?

    出于学习目的 我正在使用 Python Flask 创建一个网站 我想从数据库中恢复图像并将其显示在屏幕上 但一步一步来 我首先不知道如何将图像保存在我的数据库中 我的搜索只显示我必须使用bytea输入我的数据库 然后我得到我的图像并以某种
  • 尝试比较两个 csv 文件并将差异写入输出

    我正在开发一个脚本 它获取 2 个 csv 文件之间的差异 并生成一个新的 csv 文件作为具有差异的输出 但前提是两个输入文件之间的相同 2 行 指行号 包含不同的数据 例如文件 1 中的第 3 行有 mike 篮球运动员 文件 2 中的
  • 如何在 Log 中模拟方法 e

    这里 Utils java 是我要测试的类 以下是在 UtilsTest 类中调用的方法 即使我嘲笑 Log e 方法 如下所示 Before public void setUp when Log e any String class an
  • 从 np.fft 计算幅度

    我似乎使用 np fft fft 计算原始波的不正确振幅 显示了 fft 的图 您可以看到显示的幅度约为 3 和 1 5 但如果您查看代码 我将使用幅度 7 和 3 来生成信号 该图应该有两个尖峰 在 x 13 处达到 y 3 在 x 15
  • 浏览器历史记录管理

    我正在尝试找到一种干净的解决方案 以最有效的方式处理浏览器历史记录 我正在使用 GWT 但这个问题确实比这更普遍 这是我的情况 我认为这是相当标准的 我有一个 Web 应用程序 它有几个不同的页面 位置 位置 无论你想怎么称呼它 我会显示这
  • SIP ACK 对话框为空

    我正在使用 JAIN SIP 在 java 中创建 SIP 客户端 我已经成功注册并发送 INVITE 但是当将 ACK 发送回服务器时 我收到错误消息 Cannot Create ACK no remote Target 我检查了 Dia
  • 断言失败:运行时反射宇宙中的不安全符号 DeveloperApi

    我正在 Java 8 程序中运行以下几行 SparkConf sparkConf new SparkConf sparkConf setAppName testJob sparkConf setMaster spark blahblah 7
  • 仅使用一次计时器

    我只想在主窗体初始化后 1 秒使用计时器一次 我以为下面会有一个消息框只显示一次 Hello World 但实际上每秒都会有一个新消息框显示 Hello World 为什么这样 我已经把t Stop 在勾选事件中 另外 我是否需要以某种方式
  • 任务并行库 - 如何立即返回但有一个并行步骤

    我有以下工作流程 需要以非阻塞并行处理方式进行 我想要方法DoStuff 立即返回 所以我正在使用任务并行库 DoStuff Do some setup Parse an Excel file then for each row Fill
  • 随后启动两个 WebClient.UploadStringAsync 调用

    当调用 WebClient UploadStringAsync 两次 而不等待 WebClient UploadStringCompleted 事件时 将引发以下异常 WebClient 不支持并发 I O 操作 显然 这是不支持的 想要启
  • Silverlight 4 BitmapImage - bmp 文件支持

    MSDN 提到了对 PNG 和 JPG 的支持 但许多人正在尝试 setSource file bmp 并抱怨 灾难性失败 有人可以澄清一下 是否支持 bmp 吗 如果没有 在 silverlight 中显示 bmp 的最佳方式是什么 Si
  • 如何在javatechig示例中添加Recycler项目SetOnClickListener

    我正在尝试添加onclick监听器为了这RecyclerView但我尝试了一切 但它不起作用 饲料项目 public class FeedItem private String title private String thumbnail
  • Chrome 中的 Mailto 链接会打开新选项卡

    您好 我的页面上有一个 mailto 链接 该链接在其他浏览器中运行良好 在 Chrome 中 它会打开一个新选项卡 其中 URL 为 mailto 链接 有什么办法可以抑制Web开发人员的行为吗 从我读到的内容来看 这似乎是 chrome
  • 在两个单独的 Angular 应用程序之间进行更改时,AngularJS e2e 测试会挂起

    我有一个令人沮丧的问题 我想为复杂的角度应用程序编写端到端测试 问题是登录屏幕是一个单独的应用程序 最初的想法是 它将根据登录凭据进行分支 以分离我们生态系统中的其他角度应用程序 它就像一个魅力 对于测试来说 这是一场噩梦 测试按预期工作
  • Visual Studio 2015 - ASP.Net 应用程序只有重新启动 Visual Studio 后才会启动

    有时 当我尝试启动 ASP Net 应用程序 调试 时 应用程序将无法启动 Visual Studio 看起来应用程序正在运行 状态栏的颜色变为橙色 浏览器打开并 永远 加载 IIS Express 正在运行 并且该站点显示在 IIS 尝试
  • django 使用动态列名称进行注释

    我在 django 应用程序中有一个模型 其结构如下 class items models Model name models CharField max length 50 location models CharField max le
  • 如何在不使用 10 次方表示的情况下将双精度数转换为字符串 (E-05)

    如何在不使用 10 次方表示的情况下将双精度数转换为字符串 E 05 double value 0 000099999999833333343 string text value ToString Console WriteLine tex
  • 为什么在 for 循环中检查 HashMap 是否具有特定值需要很长时间才能执行?

    我正在研究 Double DES 上的中间相遇攻击 我已经实现了 DES 加密 解密并完成了加密 现在我想对 Double DES 执行 MITM 攻击以找到密钥 我尝试实现此目的的方法是在 for 循环中将中间密码存储为 HashMap