我需要使用 SecureRandom
类生成 random 32 个字符的字符串。我尝试生成 32 字节数组然后使用 Base64 编码:
byte[] bytes = new byte[32];
new SecureRandom().nextBytes(bytes);
new String(Base64.encodeBase64(bytes));
但是这段代码生成了一个超过 32 个字符的字符串。如何在仍然使用 SecureRandom
类的同时获得随机的 32 个字符?
最佳答案
改为尝试编码 22 到 24 个字节。
当对这个数量进行编码时,生成的 Base64 编码字符串应该恰好包含 32 个字符,尽管其中一些可能是 =
标记,这取决于它是 22 字节还是 23 字节由于填充。
如果您不想要=
标记,只需编码24 个字节并且不会添加填充。
如果您对填充或 Base64 编码的工作原理更感兴趣,当前的 wikipedia article很详细。
例如相应地更改您的代码:
byte[] bytes = new byte[24];
new SecureRandom().nextBytes(bytes);
new String(Base64.encodeBase64(bytes)); // Should be 32 characters in length.
关于java - 在我的例子中生成随机字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29744691/