java - 如何创建随机 AES 128 PrivateKey 和 IV 作为字符串?
问题描述
AES 128 private_keys
制作和的简单方法是什么init vectors
?
我读到使用UUID是常见的做法,但是当我尝试实现时:
UUID uuid = UUID.randomUUID() ;
String private_key = uuid.toString();
错误信息:
无效的 AES 密钥长度:36 字节
告诉我这uuid.toString() = "38400000-8cf0-11bd-b23e-10b96e4ef00d"
不是 128 字节。
另外,您将如何创建一个 16 字节的 Init 向量作为字符串?你也可以使用uuid吗?
解决方案
密钥(通常是加密)是在字节字节数组上定义的。您可以查看博客以获取示例
顺便说一句 - 我们谈论的是 128 位(=16 字节)
制作 AES 128 private_keys 和 init 向量的简单方法是什么?
最安全的方法是使用 SecureRandom 类,尤其是对于密钥。我不会考虑使用足够安全的 uuid(它不够随机)
SecureRandom rnd = new SecureRandom();
byte[] key = new byte[KEY_SIZE / 8];
byte[] iv = new byte[SYMMETRIC_BLOCK_SIZE / 8];
rnd.nextBytes(key);
rnd.nextBytes(iv);
如何创建随机 AES 128 PrivateKey 和 IV 作为字符串?
如果您想要键或 iv(字节数组)的文本表示,您可以对它们进行编码,Base64 或 Hex 是最常见的编码
Base64.getEncoder().encodeToString(...)
推荐阅读
- php - AWS:SNS 电子邮件 - 自定义任何主题的 SNS 订阅确认电子邮件
- wpf - 即使设置了 WindowChrome 也会出现默认标题栏
- google-cloud-platform - 在 GCP 中,如何处理作为测试部署一部分的 KMS?
- c++ - 来自另一个字节数组的双精度数组的别名
- php - Laravel foreach 模型
- arrays - 如何制作一个改变实例属性的函数?
- kotlin - 强制应用内深层链接网址在 chrome 而不是 android 应用中打开
- java - 在java中创建对象后更改对象字段
- flutter - 有没有一种方法可以从 Flutter 中的单个 JSON 创建单独的多个列表?
- ipad - OOTB 调查未在 iPad Salesforce 应用程序中以模式打开