java - KeyAgreement.generateSecret(String algorithm) 有什么方法呢?

标签 java security encryption

我们实现了 Diffie-Hellman key 交换算法:

KeyAgreement aKeyAgree = KeyAgreement.getInstance("DH");

keyAgreement.init(myPrivateKey);
keyAgreement.doPhase(otherPublicKey)

现在我们需要生成用于 AES 加密的 key 。有方法 generateSecret(String algorithm)。我想我应该用 'AES' 参数调用它。

但是对于 DH,我使用 512 位长度的公钥,所以 secret 也应该是 512 位长度。但是 AES 允许 256 位长度的 key 作为最大值。没有参数的普通方法 generateSecret() 返回 512 位 DH secret 。但是 generateSecret(String) 做了什么?它如何将 512 位 key 转换为 256/128 位 AES key ?

最佳答案

Diffie-Hellman 是一种 key 协商协议(protocol); AES是一种对称加密算法。

无参数 generateSecret() 调用为 key 协商算法提供默认大小的 key 。将算法名称传递给 generateSecret 将为您提供一个大小适合您的算法的 key (即对于 AES 缩短为 256 位)。

我找到了一个显示示例的页面。

http://www.exampledepot.com/egs/javax.crypto/KeyAgree.html

我希望您可以将示例中的“DES”替换为“AES”或您想使用的任何对称 key 算法。

关于java - KeyAgreement.generateSecret(String algorithm) 有什么方法呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3503006/

相关文章:

asp.net-mvc - 所有请求均出现 HTTP 错误 401.2 - 未经授权的响应

java - [请求处理失败;嵌套异常是 java.lang.NullPointerException]

java - 如何计算具有相同键的 HashMap 值的平均值

java - 如何检查 Java 程序的输入/输出流是否连接到终端?

python - 在服务器端将 python str.format 方法与用户提交的模板一起使用是否安全?

mysql - 数据库的 Hibernate 加密对应用程序完全透明

Java如何从字符串实例化一个类

security - 使用java使用SHA256加密解密

android - 在android中使用基于密码的加密

c# - 从 Action Script 到 C# 的 Rijndael 加密