gpt4 book ai didi

java - 生成无溢出的安全随机 double

转载 作者:行者123 更新时间:2023-11-30 06:36:12 25 4
gpt4 key购买 nike

我想在一个很大的范围内生成一个随机的、加密安全的 double 值,比如 -Double.MAX_VALUEDouble.MAX_VALUE

根据现有的 StackOverflow 问题 ( 1 2 3 4 5 6 ),您可能会认为使用 min + new SecureRandom().nextDouble() * range 就足够了,但是 Double.MAX_VALUE - -Double.MAX_VALUE 溢出并变得无限!

为了解决这个问题,this StackOverflow answer建议使用 ThreadLocalRandom.nextDouble(min, max) 。虽然此方法确实能够跨越我需要的范围,但此实现在加密上并不安全!

如何安全地生成这么大范围内的随机数?

最佳答案

我认为这是不可能的。密码安全性的要求之一是这些数字应该与随机统一选择的值无法区分。

如果您选择 -10308 到 +10308 范围内的 264 个数字,则两个相邻的数字将用相当大的距离2.0E+308/2**64,大约是1.08E+289。

由于 double 有 53 位有效数,因此大多数数字无论如何都无法区分。例如,在使用 double 算术时,将 1.08E+289 添加到 1.0E+307 绝对没有效果。

即使您确实找到了一种将 264 值映射到此范围的方法,您可能仍然容易受到 birthday attacks 的影响。 。一般来说,您至少需要 80 位才能提供有用的保护级别。

关于java - 生成无溢出的安全随机 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45173256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com