java.util.Random 和 java.security.SecureRandom 之间的区别
我的团队交出了一些服务器端代码(在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