我们实施了Diffie-Hellman密钥交换算法:
KeyAgreement aKeyAgree = KeyAgreement.getInstance("DH");
keyAgreement.init(myPrivateKey);
keyAgreement.doPhase(otherPublicKey)
现在我们需要生成一个用于AES加密的秘密。方法generateSecret(String algorithm)
。我想我应该用'AES'
参数来称呼它。
但对于DH,我使用512位长的公钥,所以秘密也应该是512位长度。但AES允许256位长度的密钥作为最大值。不带参数的普通方法generateSecret()
返回512位DH密钥。但是generateSecret(String)
做了什么?它如何将512位密钥转换为256/128位AES密钥?
答案 0 :(得分:4)
Diffie-Hellman是一个关键的协议协议; AES是一种对称加密算法。
无参数generateSecret()
调用提供密钥协商算法的默认大小的密钥。将算法名称传递给generateSecret
将为您提供一个具有适当算法大小的密钥(即AES缩短为256位)。
我找到了一个显示示例的页面。
http://www.exampledepot.com/egs/javax.crypto/KeyAgree.html
我希望您只需将示例中的“DES”替换为“AES”或您想要使用的任何对称密钥算法。
答案 1 :(得分:0)
此方法只是截断generatedSecret()。