gpt4 book ai didi

java - SecureRandom.ints() 安全吗?

转载 作者:IT老高 更新时间:2023-10-28 20:30:26 27 4
gpt4 key购买 nike

众所周知,SecureRandom 类为生成的随机数提供了强大的加密安全性。 java.util.Random 对于需要加密安全的情况是不安全的。 SecureRandom 的典型用法是:

SecureRandom random = new SecureRandom();
byte bytes[] = new byte[20];
random.nextBytes(bytes);

不过,我遇到了一个案例:

SecureRandom random = new SecureRandom();
int number = random.ints();

ints() 方法继承自 java.util.Random 类。当安全随机数生成器 SecureRandom 使用从不安全随机数生成器继承的方法时,我感到困惑,它是否安全?

最佳答案

是的,它是安全的。

java.util.Random 的代码检查表明 ints() 创建了一个拆分器,该拆分器使用 internalNextInt(...) 生成随机整数。这反过来又在 this 上调用 nextInt()。在 java.security.SecureRandom 的情况下,nextInt() 被覆盖以生成“安全”随机数1

您可以通过查看源代码自行确认。


1 - 当然,将整数或整数序列称为“安全”实际上是没有意义的。在某些情况下,SecureRandom 可能没有您需要的属性。 (这取决于类使用的实际 RNG 或 PRNG 实现、提供的种子或系统提供的熵源的质量等。)但是 SecureRandom::ints() 将生成具有相同属性的整数序列就好像您对同一个对象进行了一系列 SecureRandom::nextInt() 调用。如果后一个序列适合您的目的(无论它们是什么),那么前一个也是。

关于java - SecureRandom.ints() 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57266324/

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