Java在使用加密算法编程中的非对称密码时,用到的DH密钥交换算法出现以下错误信息:
Exception in thread "main" java.security.NoSuchAlgorithmException: Unsupported secret key algorithm: DES
at com.sun.crypto.provider.DHKeyAgreement.engineGenerateSecret(DHKeyAgreement.java:387)
at javax.crypto.KeyAgreement.generateSecret(KeyAgreement.java:648)
at DHUtil.getSecretKey(DHUtil.java:93)
at Main.main(Main.java:98)
密钥所用的算法不被支持,这个是由于JDK8 update 161之后,DH的密钥长度至少为512位,但AES算法密钥不能达到这样的长度,长度不一致所以导致报错。
解决的方法:
将 -Djdk.crypto.KeyAgreement.legacyKDF=true 写入JVM系统变量中,可以在eclipse的run configurations里配置系统变量:
可以点击上方工具栏中的run下面的Run Configurations…
左侧选择自己出错误的类,点击Arguments
将 -Djdk.crypto.KeyAgreement.legacyKDF=true 复制到VM arguments里面,重新运行程序就可以了。