在我的例子中生成随机字符

generate random characters in my case

我需要使用 SecureRandom class 生成 随机 32 个字符的字符串。我尝试生成 32 字节数组然后使用 Base64 编码:

byte[] bytes = new byte[32];
new SecureRandom().nextBytes(bytes);

new String(Base64.encodeBase64(bytes));

但是这段代码生成了一个超过 32 个字符的字符串。如何在仍然使用 SecureRandom class 的同时获得随机的 32 个字符?

尝试改为编码 22 到 24 个字节。

编码此数量时,生成的 Base64 编码字符串应恰好包含 32 个字符,尽管其中一些可能 = 根据其 22 或 23 字节的填充字符进行标记。

如果您不想要 = 标记,只需编码 24 个字节,不会添加任何填充。

如果你对padding或Base64编码的原理更感兴趣,当前的wikipedia article已经很详细了

例如相应地更改您的代码:

byte[] bytes = new byte[24];
new SecureRandom().nextBytes(bytes);

new String(Base64.encodeBase64(bytes)); // Should be 32 characters in length.

我们可以使用一行代码来实现。使用 org.apache.commons.lang.RandomStringUtils 来自 commons-lang 库。

代码:

RandomStringUtils.randomAlphabetic(32);