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

标签 java base64

我需要使用 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/

相关文章:

具有父类(super class)和子类的 Java 克隆

java - 使用 Hibernate JPA 启动 Spring Boot 应用程序时出现 NoSuchMethodError

base64 - 使用Base64编码有什么好处?

ios - 在 Swift 中处理 base64String 作为响应

javascript - 即使质量为 100,Cordova 相机 getPicture 也是无损压缩

python - 查找、解码并替换文本文件中的所有 Base64 值

javascript - 使用javascript将上传的文件分成多个 block

java - JCheckbox isSelected() 即使复选框未被选中也返回 true

java - 箭头运算符 '->' 在 Java 中的作用是什么?

java - 如何使用扫描仪以正确的方式从文件中读取重音字符?