使用DH算法进行数据加密:
用到的Jar包:
<dependency>
<groupId>com.jianggujin</groupId>
<artifactId>JCodec</artifactId>
<version>1.0.0</version>
</dependency>
调试报错:
Exception in thread "main" com.jianggujin.codec.util.JCodecException: java.security.NoSuchAlgorithmException: Unsupported secret key algorithm: DES
at DhAlgo.Ahalgom.getSecretKey(Ahalgom.java:252)
at DhAlgo.Ahalgom.getCipher(Ahalgom.java:213)
at DhAlgo.Ahalgom.getEncryptCipher(Ahalgom.java:158)
at DhAlgo.Ahalgom.encrypt(Ahalgom.java:124)
at DhAlgo.Gomain.main(Gomain.java:45)
Caused by: 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 DhAlgo.Ahalgom.getSecretKey(Ahalgom.java:250)
... 4 more
问题原因:密钥所用的算法不被支持,由于JDK8 update 161之后,DH密钥长度至少为512位,AES算法密钥不能达到这样的长度,长度不一致所以导致报错。
解决办法:在VM Options 中加入如下变量
-Djdk.crypto.KeyAgreement.legacyKDF=true