Spring Security:简单加密/解密不起作用:InvalidKeyException
Posted
技术标签:
【中文标题】Spring Security:简单加密/解密不起作用:InvalidKeyException【英文标题】:Spring Security: Simple Encryption / decryption not working: InvalidKeyException 【发布时间】:2018-03-18 02:42:27 【问题描述】:我正在尝试编写一个非常简单的程序来加密和解密字符串:
String password = "kdfljxcasd";
String encodeThat = "Hello World + some special chars!^^-";
String salt = KeyGenerators.string().generateKey();
BytesEncryptor encryptor = Encryptors.standard(password, salt);
// breakpoint steping doesn't reach that point - it gets stuck here for some reason...
byte[] encrypted = encryptor.encrypt(encodeThat.getBytes());
byte[] decrypted = encryptor.decrypt(encrypted);
System.out.println("Before encryption: " + encodeThat);
System.out.println("Encrypted: " + encrypted.toString());
System.out.println("After encryption: " + decrypted.toString());
但由于某种原因,我从未得到加密值。当我打电话给enryptor.encrypt()
时,它永远不会到达那个点。
我收到以下异常:
'Unable to initialize due to invalid secret key' java.lang.IllegalArgumentException: Unable to initialize due to invalid secret key
我做错了什么?
【问题讨论】:
【参考方案1】:好的,经过几个小时的搜索,我终于找到了解决方案:
显然我没有安装正确的无限力量政策。
我就是这样解决的:
从以下位置下载政策:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
解压并将 local_policy.jar 和 US_export_policy.jar 放入 $jdk -path/jre/lib/security 并覆盖现有文件。 (注意:不要把它放在 JRE 文件夹中。你必须把它放在 jdk/jre/... - 这花了我几个小时 :))
重启服务器就可以了!
希望有所帮助:)
【讨论】:
有没有办法在不添加外部 jar 的情况下做到这一点? 我不知道,抱歉。但是您需要一个没有外部 jar 的解决方案吗?【参考方案2】:从 Java 8u151 开始,您可以使用属性解决此问题:
Security.setProperty("crypto.policy", "unlimited");
【讨论】:
【参考方案3】:尝试升级到较新的 java 8 JDK 版本。
对我来说,我尝试了 2 个版本:
1.8.131 - 失败 1.8.201 - 成功【讨论】:
【参考方案4】:遇到这个问题并通过从JDK 1.8
切换到Adopt Open JDK 8
来解决它
【讨论】:
以上是关于Spring Security:简单加密/解密不起作用:InvalidKeyException的主要内容,如果未能解决你的问题,请参考以下文章