在我的情况下生成随机字符

时间:2015-04-20 09:58:41

标签: java base64

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

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

new String(Base64.encodeBase64(bytes));

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

2 个答案:

答案 0 :(得分:1)

尝试编码22到24个字节。

对此数量进行编码时,生成的Base64编码字符串应该包含正好32个字符,尽管其中一些字符可能是=标记,具体取决于填充的22或23字节。

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

如果您对填充或Base64编码的工作原理更感兴趣,那么当前的wikipedia article非常详细。

e.g。相应地更改您的代码:

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

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

答案 1 :(得分:0)

我们可以使用单行代码实现这一目标。使用commons-lang库中的org.apache.commons.lang.RandomStringUtils

代码:

RandomStringUtils.randomAlphabetic(32);