java - 如何在 Java 中创建安全的随机 AES key ?

标签 java encryption aes jce

使用标准 JDK 在 Java 中生成安全、随机 AES key 的推荐方法是什么?

在其他帖子中,我发现了这一点,但使用 SecretKeyFactory 可能是一个更好的主意:

KeyGenerator keyGen = KeyGenerator.getInstance("AES");
SecureRandom random = new SecureRandom(); // cryptograph. secure random 
keyGen.init(random); 
SecretKey secretKey = keyGen.generateKey();

如果答案包括解释为什么它是生成随 secret 钥的好方法,那就太好了。谢谢!

最佳答案

我会使用您建议的代码,但稍微简化一下:

KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256); // for example
SecretKey secretKey = keyGen.generateKey();

让提供者选择它计划如何获得随机性 - 不要定义可能不如提供者已经选择的东西。

此代码示例假定 (as Maarten points out below) 您已将 java.security 文件配置为在列表顶部包含您的首选提供程序。如果要手动指定提供者,只需调用 KeyGenerator.getInstance("AES", "providerName");

要获得真正安全的 key ,您需要使用 hardware security module (HSM) 来生成和保护 key 。 HSM 制造商通常会提供一个 JCE 提供程序,使用上面的代码为您生成所有 key 。

关于java - 如何在 Java 中创建安全的随机 AES key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18228579/

相关文章:

javascript - slowAES 不适用于 CBC/PKCS7 - 替代方案?

cryptography - OpenSSL GCM 解密中的后期身份验证

java - 流式传输和过滤 SortedMap

java - Glassfish 3 : Why do I have to deploy all my libraries into domains/lib/to get it to work?

java - 我应该使用 Cipher.WRAP_MODE 或 Cipher.ENCRYPT_MODE 来加密 session key 吗?

c# - 散列和 GetString/GetBytes 问题

java - fetch sql查询成为变量

java - 测试NG XML : Groups still being executed although failure occurred in the dependent group

java - 使用 Java 库 jasypt 摘要加密密码

java - 最后一个 block 使用 CipherInputStream/CipherOutputStream 不完整,即使使用填充 AES/CBC/PKCS5Padding