我们实现了 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/