25

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

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

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

4

2 回答 2

44

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

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;
}
于 2018-05-16T22:51:39.483 回答
0

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

于 2017-09-17T05:40:35.037 回答