我的团队收到了一些生成随机令牌的服务器端代码(Java),我对此有一个疑问-
这些令牌的用途非常敏感-用于会话ID,密码重置链接等。因此,它们确实需要进行密码随机处理,以避免有人猜测或对它们进行暴力破解。令牌是“长”的,因此它是64位长。
该代码当前使用java.util.Random
该类来生成这些令牌。该文档的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
启动时的一次
Random
在启动时播种一次,还是为每个令牌播种新的种子?希望这是一个愚蠢的问题,但我想我会检查一下。
long
或double
值。