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

How to generate a SecureRandom string of length n in Java?

本问题已经有最佳答案,请猛点这里访问。

我正在生成一个随机字符串,使用:

1
2
3
4
5
6
private String generateSafeToken() {
    SecureRandom random = new SecureRandom();
    byte bytes[] = new byte[512];
    random.nextBytes(bytes);
    return bytes.toString();
}

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


我不明白为什么在这里提到的"重复"问题不能回答问题时,这个标记为"重复"。无论如何,我要找的答案都在下面,以防它对其他人有帮助。

1
2
3
4
5
6
7
8
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;
}


bytes.toString();错误,如果要将其转换为字符串,请尝试使用array.toString(bytes)或new string(bytes)。