我正在尝试编写一个非常简单的程序来加密和解密字符串:
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
我做错了什么?
答案 0 :(得分:2)
好的,经过几个小时的搜索,我终于找到了解决方案:
显然我没有安装无限强度的正确政策。
这就是我解决它的方式:
从以下网址下载政策: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 / ...... ......这花了我几个小时:))
重新启动服务器,它可以正常工作!
希望有所帮助:)
答案 1 :(得分:0)
从Java 8u151开始,您可以使用以下属性来解决此问题:
Security.setProperty("crypto.policy", "unlimited");
答案 2 :(得分:0)
尝试升级到Java 8 JDK的新版本。
对我来说,我尝试了2个版本: