使用Java实现DH函数时出现"Unsupported secret key algorithm: AES"错误
出现的错误及原因
今天在使用Java实现DH密钥交换函数时出现了 "java.security.NoSuchAlgorithmException: Unsupported secret key algorithm: AES"这样的错误。出错的原因在于:DH密钥长度至少为512位,而AES算法密钥没有这么长,密钥长度不一致引起的。
解决方式
在JVM中配置系统变量
可以通过在JVM中配置系统变量为:
“-Djdk.crypto.KeyAgreement.legacyKDF=true”
1.配置方式:右键你的类,找到运行方式,点击运行配置
2.在运行配置中选择自变量一栏,在VM自变量框中复制
“-Djdk.crypto.KeyAgreement.legacyKDF=true”
然后保存,应用,问题则解决。该种方法只对当前设置的Java类生效
在jre中配置缺省VM变量
1.点击窗口,选择首选项
2.编辑当前使用的jre
点击完成,则配置生效。该种方法对当前开发环境中的运行的java程序皆有效。若同时配置了jre中的VM参数和Java运行程序的VM参数,则只有jre的配置生效。
在可运行jar包中如何配置
若需要在将程序导出为可运行jar包,则需要在运行时采用命令提示符运行,在运行时添加VM参数,运行命令为:
java -jar -Djdk.crypto.KeyAgreement.legacyKDF=true jar包的名字.jar