如何在 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;
}
我正在使用以下方法生成随机字符串:
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;
}