相关疑难解决方法(0)

java.util.Random和java.security.SecureRandom之间的区别

我的团队交出了一些生成随机令牌的服务器端代码(用Java),我对此有一个问题 -

这些令牌的目的是相当敏感的 - 用于会话ID,密码重置链接等.所以他们确实需要加密随机,以避免有人猜测它们或蛮力强制它们.令牌是"长",所以它是64位长.

代码当前使用java.util.Random该类来生成这些令牌.文档([ http://docs.oracle.com/javase/7/docs/api/java/util/Random.html] [1 ])java.util.Random清楚地说明了以下内容:

java.util.Random的实例不具有加密安全性.相反,请考虑使用SecureRandom来获取加密安全的伪随机数生成器,以供安全敏感应用程序使用.

但是,代码当前使用的方式java.util.Random是 - 它实例化java.security.SecureRandom类,然后使用该SecureRandom.nextLong()方法获取用于实例化java.util.Random类的种子.然后它使用java.util.Random.nextLong()方法生成令牌.

所以我现在的问题 - 鉴于java.util.Random正在使用种子,它仍然是不安全的java.security.SecureRandom吗?我是否需要修改代码以便它java.security.SecureRandom专门用于生成令牌?

目前代码种子是Random启动时的一次

java security random cryptography

200
推荐指数
3
解决办法
8万
查看次数

并发使用java.util.Random时的争用

Oracle Java文档说:

java.util.Random的实例是线程安全的.但是,跨线程并发使用相同的java.util.Random实例可能会遇到争用并因此导致性能不佳.请考虑在多线程设计中使用ThreadLocalRandom.

表现不佳背后的原因可能是什么?

java concurrency performance multithreading contention

12
推荐指数
1
解决办法
987
查看次数

Java 中的默认种子 PRNG

我想知道Math.random()Java背后 PRNG* 的默认种子是什么。据我了解,C 中的那个是基于系统时钟的。那么它在Java中是否相似?另外,每次Math.random()调用时种子都会改变吗?

*PRNG = 伪随机数生成器

java random prng

5
推荐指数
1
解决办法
8192
查看次数