我正在尝试使用 SecureRandom 生成字母数字字符串。
这是我的小代码:
import java.math.BigInteger;
import java.security.SecureRandom;
public class GenerateSecureRandom {
private static SecureRandom SECURE_RANDOM = new SecureRandom();
public static String nextSessionId() {
return new BigInteger(64, SECURE_RANDOM).toString(16);
}
}
它有效!例如,我得到:7c52cfce6c479803 = 16 个字符:好的!
我的问题是有时此代码返回一个 15 个字符的字符串,我不明白为什么。 (我是初学者...)
这里是一个示例:515c38584d0a077 = 15 个字符:错误
我做错了什么?
我是Java编程的初学者,所以如果我的方法不正确,请原谅:)
如果这段代码不正确,我怎样才能得到预期的结果?我想使用 SecureRandom。
提前感谢您的回答
抱歉,如果我的问题重复,我搜索但没有找到答案......
最佳答案
BigInteger
constructor you're using需要最大位长度。
Constructs a randomly generated BigInteger, uniformly distributed over the range 0 to (2numBits - 1), inclusive.
Parameters:
numBits
- maximum bitLength of the new BigInteger.
您可能很少会得到长度小于 15 个字符的字符串。
出现这种情况是因为最高有效位可能为零,从而导致十六进制数不需要表示完整的 16 个字符。请注意,您生成的字符串都不以 0
开头。
如果少于 16 个字符,则在前面添加 '0'
个字符。
关于java - 如何使用 SecureRandom 在 Java 中生成 16 个字符的随机字母数字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50047467/