【发布时间】:2021-09-18 00:25:57
【问题描述】:
我正在尝试使用 SecureRandom 在我的 java 项目中生成随机数。但我有点困惑如何为SecureRandom 保留我的对象。它应该是static 类成员。我不打算从外面打电话给这个。以下是我目前的实现:
Class MyClass {
private static final SecureRandom secureRandom = new SecureRandom();
private long calculate(int noOfRetry){
final long value = someValueCalculationWith-noOfRetry;
final float randomNo = secureRandom().nextFloat() + 1;
return (long) (value*randomNo);
}
}
这是在 java 中使用 SecureRandom 的正确方法吗?
【问题讨论】:
-
取决于上下文,请参阅此处了解一些非常好的信息重新熵问题stackoverflow.com/questions/27622625/…
-
请注意
float和double具有非常有趣的属性 w.r.t。精度、舍入和随机性。当我看到在安全应用程序中使用float或double时,我总是感到有点不寒而栗——有些东西可能不合时宜。使用例如nextInt(int max)代替。 -
哦,这似乎是一个随机超时或其他什么,也要注意这可能会成功隐藏一个计算的计算时间,但统计数据仍然可以提供有趣的细节。例如。如果您将最小额外时间添加到最小运行时间,您会泄漏后者,即使对于该特定实例也是如此。有一个恒定时间的实现可能会更好地隐藏东西。
标签: java random cryptography