我需要使用SecureRandom
类生成随机 32个字符的字符串。我尝试生成32字节数组,然后使用Base64编码:
byte[] bytes = new byte[32];
new SecureRandom().nextBytes(bytes);
new String(Base64.encodeBase64(bytes));
但是这段代码会生成一个超过32个字符的字符串。如何在仍然使用SecureRandom
类时获得随机的32个字符?
答案 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);