如何在 Java 中生成长度为 n 的 SecureRandom 字符串?

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

我正在使用以下方法生成随机字符串:

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

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

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

我不明白为什么这里提到的 "duplicate" 问题显然没有提出相同的问题,但为什么将其标记为重复 - 尽管下面的答案包含此信息。无论如何,下面是我一直在寻找的答案,以防对其他人有帮助。

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;
}