我知道Random
类会产生不安全的随机序列,我在处理安全性时应该更喜欢使用SecureRandom
。但是ThreadLocalRandom
呢?它或多或少是安全的?我应该喜欢ThreadLocalRandom还是SecureRandom?
// generate a five-digit numeric confirmation code
Long code = ThreadLocalRandom.current().nextLong(1, 99999);
我知道Random
类会产生不安全的随机序列,我在处理安全性时应该更喜欢使用SecureRandom
。但是ThreadLocalRandom
呢?它或多或少是安全的?我应该喜欢ThreadLocalRandom还是SecureRandom?
// generate a five-digit numeric confirmation code
Long code = ThreadLocalRandom.current().nextLong(1, 99999);
如its javadoc描述,ThreadLocalRandom
类似于Random
(即不安全)但在并发访问的情况下更好的性能。
ThreadLocalRandom
的实例不是加密安全的。请考虑在安全敏感的应用程序中使用SecureRandom
。
ThreadLocalRandom
类似于ThreadLocal<Random>
,它为每个线程创建Random
实例。这与密码术语中的安全无关。
所以问题是“Random
和SecureRandom
”实现之间有什么区别。
SecureRandom
不同之处在于它通过了密码学中安全性要求的测试。它确实通过了由FIPS 140-2(用于密码学的发生器的标准)指定的测试。欲了解更多详情,请参阅SecureRandom javadoc。