如何在Java中生成长度为n的安全随机字符串?

2022-09-01 18:41:03

我使用以下命令生成一个随机字符串:

private String generateSafeToken() {
    SecureRandom random = new SecureRandom();
    byte bytes[] = new byte[512];
    random.nextBytes(bytes);
    return bytes.toString();
}

这将给出长度为 11 的字符串,例如 。如何使上述方法返回指定长度的字符串。例如 20 个字符?[B@70ffc557


答案 1

我不明白为什么这里提到的“重复”问题显然没有问同样的问题,这被标记为重复 - 尽管下面的答案包含此信息。无论如何,我正在寻找的答案在下面,以防万一它可以帮助其他人。

private String generateSafeToken() {
    SecureRandom random = new SecureRandom();
    byte bytes[] = new byte[20];
    random.nextBytes(bytes);
    Encoder encoder = Base64.getUrlEncoder().withoutPadding();
    String token = encoder.encodeToString(bytes);
    return token;
}

答案 2

bytes.toString();是错误的,请尝试使用Arrays.toString(bytes) - 或者如果要将其转换为String,请尝试使用新的String(bytes)。


推荐