THE 7 不尊重java安全随机种子

2023-12-09

我手头有一个难题。我创建了一个 AES 服务来加密/解密敏感信息。 AES 密钥是使用 java 随机生成的SecureRandom。我有一个受保护的文件,用于存储种子,并且在调用服务时,种子将填充到安全随机类中。

为了确保它有效,我有以下逻辑:

private boolean secureRandom(final String seed) {
  SecureRandom sr1 = new SecureRandom(seed.getBytes(UTF8_CHARSET));
  SecureRandom sr2 = new SecureRandom(seed.getBytes(UTF8_CHARSET));
  //Two secure random with the same seed should generate the same results
  boolean secureRandomWorks = sr1.nextLong() == sr2.nextLong();
  if (!secureRandomWorks) {
    System.err.println("Secure random not supported. Defaulting to old key");
  }
  return secureRandomWorks;
}

这里的想法是我应该能够使用相同的种子创建两个安全的随机对象,并且它们在调用时都应该返回相同的值nextLong()

当我在 Windows 计算机上部署应用程序时,这工作正常,但当我将其部署在 RHEL 7 计算机上时,我收到错误。

我的印象是,只要种子相同,两个实例总是会产生相同的输出。在 Windows 上似乎是这种情况,但当我在 RHEL 7 上测试时,情况似乎并非如此。

我创建了这个简单的测试来进行验证:

SecureRandom sr1 = new SecureRandom("encryptionKey".getBytes("UTF-8"));
SecureRandom sr2 = new SecureRandom("encryptionKey".getBytes("UTF-8"));

for (int i = 0; i < 1000; i++) {
  System.out.println(sr1.nextLong() == sr2.nextLong());
}

在 Windows 上,每个输出都是 true,而在 RHEL 7 上,这是 false。

关于可能导致 RHEL 7 忽略种子的任何建议?


我没有找到任何文档禁止您在 RHEL 7 上观察到的行为。

JavaDoc 用于java.util.Random明确指出

如果使用相同的种子创建两个 Random 实例,并且对每个实例进行相同的方法调用序列,则它们将生成并返回相同的数字序列

JavaDoc 用于java.security.SecureRandom不包含类似的声明。

相反,它提到(在文档中setSeed() method)

重新播种该随机对象。给定的种子补充而不是替代现有的种子。因此,重复调用保证永远不会降低随机性。

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

THE 7 不尊重java安全随机种子 的相关文章

随机推荐

  • Windows Phone 7.1 应用程序中的自动登录过程

    在我的 Windows Phone 应用程序中 银光应用程序 我希望用户在成功登录后自动登录到应用程序 即我不希望用户每次都登录 我通过一个隔离存储文件概念 即首先我创建了 一个目录 我创建了一个隔离存储文件流并将电子邮件和密码凭据存储在某
  • 如何将当前日期与日期选择器中的用户输入日期进行比较

    我试图限制日期和时间 我希望如果用户尝试设置小于当前日期的日期 那么它应该显示警报 并且随着时间的推移也要做同样的事情 我正在使用日期和时间选择器和我的onDateSetListener and onTimeSetListener如下 Da
  • 带有像素图的透明 QLabel

    我有一个 QLabel 我使用 setpixmap 在上面放置了一个图像 该图像有 Alpha 通道 QLabel 位于 QWidget 上 该 QWidget 具有由图像指定的边框图像 以便重新缩放图像以填充 QWidget 在QLabe
  • 如何从结构体数组中删除一个元素?

    如何从类型结构数组中删除元素 假设我注册了一个项目 然后想删除它 我该怎么做 删除函数位于代码末尾 我想通过给出删除该项目varunummer 身份证号码 有人知道该怎么做吗 include
  • “挥发性”关键字的用途是什么?

    我读过一些关于volatile关键字 但我无法弄清楚它的正确用法 你能告诉我它在 C 和 Java 中的用途吗 考虑这个例子 int i 5 System out println i 编译器可能会对此进行优化 只打印 5 如下所示 Syst
  • 如何在 Swift 中将自定义对象追加到数组中?

    如何在 Swift 中将自定义类对象追加到数组中 下面是我的代码 但它显示错误 Error 无法将 的值分配给类型 PhotoVC Code var photoVCs PhotoVC for index in 0 lt photos cou
  • C# Mongo FirstOrDefaultAsync 挂起

    使用 2 0 驱动程序 以下代码有时会挂起并且永远不会返回 public async Task
  • 使用 javascript 正则表达式删除所有脚本

    我正在尝试使用 javascript 中的正则表达式从以下类型的字符串中删除包含内容的所有脚本标签 但我仍然得到输出 当它应该是一个空字符串时 代码是 var BG
  • 在 MATLAB 和 C++ 之间交换数据最有效的方法?

    我正在开发一个应用程序 其中有两个程序同时运行 一个在 C 中 另一个在 MATLAB 中 C 程序定期生成三个数值作为输出 MATLAB 程序需要定期但在不同的时间段访问三个输出 目前 我已经使用解决了这个问题 txt文件 当例程完成时
  • 将字符串转换为数组

    我有一根绳子 就像 string key1 value1 key2 value2 key3 value3 如何从给定的字符串中获取数组 如下所示 array array key1 gt value1 key2 gt value2 key3
  • Laravel angularJS CORS 使用 barryvdh/laravel-cors

    六个小时过去了 我仍然没有得到以下问题的解决方案 我正在尝试让 AngularJS 从不同的域访问我的 API 在网上搜索后我发现了这个package它说它可以 在 Laravel 应用程序中添加 CORS 跨源资源共享 标头支持 我遵循了
  • C# 和 Java 之间的主要区别是什么?

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我只想澄清一件事 这不是哪个更好的问题 这部分我留给其他人讨论 我不在乎 我在面试时被问到这个问题 我认为了解更多可能会有用 这些
  • Resource.properties 文件中的多行值?

    我有一个多行值Resource properties file TXT ABOUT first line second line n third line 我将其显示在 关于 框中
  • Python 多处理全局 numpy 数组

    我有以下脚本 max number 100000 minimums np full max number np inf dtype np float32 data np zeros max number 128 128 128 dtype
  • R.anim 中缺少动画,ImageSwitcher 中缺少进度条

    我喜欢动画中的两张幻灯片 我认为缺少哪些 我怎样才能做到这一点 一切都会很好 android R anim slide in right android R anim slide out left 我想插入一些图片 反之亦然 另一方面 是否
  • 通过WMI创建/删除磁盘分区

    有没有办法通过 WMI 创建 删除磁盘分区 我已经能够挂载 卸载虚拟磁盘 vhd 并列出其分区 据我所知 WMI 中没有办法创建 删除分区 您可能想查看外壳函数
  • Eclipse 远程调试预启动脚本?

    我创建了一个 C C 远程应用程序 调试配置eclipse并且能够远程调试我的应用程序 我选择使用 仅 SSH 连接选项 并注意到 结果 在我的远程系统资源管理器 RSE in eclipse 当我运行配置时 该工具会自动将我的二进制文件部
  • 如何创建透明背景的渐变框阴影?

    我想用渐变框阴影制作div 我已经找到了如何处理 before 和模糊效果 但我想制作具有透明背景的div 例如 div height 200px width 200px background color rgba 255 255 255
  • 取消 Laravel 中的作业

    如果我调用以下内容 return AdventureJob dispatch event gt character gt refresh event gt adventure event gt levelsAtATime gt delay
  • THE 7 不尊重java安全随机种子

    我手头有一个难题 我创建了一个 AES 服务来加密 解密敏感信息 AES 密钥是使用 java 随机生成的SecureRandom 我有一个受保护的文件 用于存储种子 并且在调用服务时 种子将填充到安全随机类中 为了确保它有效 我有以下逻辑