【问题标题】:How to generate a random alphanumeric string of 16 characters in Java using SecureRandom如何使用 SecureRandom 在 Java 中生成 16 个字符的随机字母数字字符串
【发布时间】:2018-04-26 16:01:53
【问题描述】:

我正在尝试使用 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。

提前感谢您的回答

对不起,如果我的问题重复了,我搜索了但没有找到答案......

【问题讨论】:

    标签: java android string biginteger alphanumeric


    【解决方案1】:

    BigInteger constructor you're using 采用最大位长度。

    构造一个随机生成的 BigInteger,均匀分布在 0 到 (2numBits - 1) 的范围内,包括 0 到 (2numBits - 1)。

    参数: numBits - 新 BigInteger 的最大 bitLength。

    您可能很少会得到长度少于 15 个字符的字符串。

    发生这种情况是因为最高有效位可能为零,导致十六进制数字需要完整地表示 16 个字符。请注意,您生成的所有字符串都不是以 0 开头的。

    如果少于 16 个字符,则在前面加上 '0' 个字符。

    【讨论】:

    • 非常感谢您的解释!适合我
    猜你喜欢
    • 2021-04-05
    • 2013-08-06
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多