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

如何在Java中生成长度为n的SecureRandom字符串?,java,secure-random,Java,Secure Random,我正在使用以下命令生成一个随机字符串: private String generateSafeToken() { SecureRandom random = new SecureRandom(); byte bytes[] = new byte[512]; random.nextBytes(bytes); return bytes.toString(); } 这将产生一个长度为11的字符串,如[B@70ffc557。如何使上述方法返回指定长度的字符串。例如,20

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

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

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

字节。toString()错误,请尝试使用数组。toString(字节)-或新字符串(字节)如果您想将其转换为字符串。

我不明白为什么会将其标记为重复,因为这里提到的“重复”问题显然不会问相同的问题-尽管下面的答案包含此信息。在任何情况下,我要寻找的答案都在下面,以防对其他人有所帮助

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

您无法将字节转换为那样的字符串。数组的toString不是数组内容的字符串表示形式。
SecureRandom
按预期返回512字节。@pvg我正在尝试生成一个令牌并将其保存在Postgres db中。我尝试了
新字符串(字节)
但是我得到了一个编码“UTF8”的
无效字节序列
错误。你能告诉我怎么做吗?你的问题是重复的,请查看重复的,或者直接用谷歌“用securerandom生成字符串令牌”,然后从881123解决方案中选择一个。不幸的是,stackoverflow已经成为一些人证明其“知识”的地方通过收集回复,一个很好的方法是在编辑环境中,在完全超出范围的情况下处理其他人的问题。不要让他们阻止你找到答案!问题是如何使用安全随机生成给定长度的随机字符串?或者如何将任何字节数组编码为文本?这两个问题都是复制品。