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

时间:2017-09-17 05:36:26

标签: 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个字符?

2 个答案:

答案 0 :(得分:14)

我不明白为什么这个标记重复,显然这里提到的“重复”问题没有回答问题。在任何情况下,我正在寻找的答案都在下面,如果它对其他人有帮助的话。

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

答案 1 :(得分:0)

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