java spring BCryptPasswordEncoder "SecureRandom random" 构造函数参数

java spring BCryptPasswordEncoder "SecureRandom random" constructor parameter

能否请您解释一下 class org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder 中的 SecureRandom random 参数的含义?

Javadoc 在这里:javadoc

我问这个构造函数:BCryptPasswordEncoder(int strength, SecureRandom random)。我不明白参数SecureRandom random是什么意思。

我已经尝试阅读 spring 文档或在 google 中找到一些内容,但我仍然不明白它的用途。我知道 bCrypt 总是在密码中添加一些随机盐,但正如我从 BCrypt class 的来源中看到的那样,它是不一样的。

正如它在 SecureRandom 的 javadoc 中所说,它是一个包含随机数的对象,您可以使用该随机数来随机化 BCryptPasswordEncoder 生成的哈希值。

以下是 class 的 javadoc 中的内容:

A cryptographically strong random number minimally complies with the statistical random number generator tests specified in FIPS 140-2, Security Requirements for Cryptographic Modules, section 4.9.1.

有关如何创建 SecureRandom 的示例,请参阅文档中的另一句话:

Typical callers of SecureRandom invoke the following methods to retrieve random bytes:

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

Callers may also invoke the generateSeed method to generate a given number of seed bytes (to seed other random number generators, for example):

  byte seed[] = random.generateSeed(20);

按如下方式定义 bean(强度为 11,SecureRandom 作为盐)

@Bean
public PasswordEncoder encoder() {
    return new BCryptPasswordEncoder(11, new SecureRandom());
}