Spring Security:简单的加密/解密不起作用:InvalidKeyException

时间:2017-10-06 10:04:23

标签: java spring-boot encryption spring-security spring-data-jpa

我正在尝试编写一个非常简单的程序来加密和解密字符串:

    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

我做错了什么?

3 个答案:

答案 0 :(得分:2)

好的,经过几个小时的搜索,我终于找到了解决方案:

显然我没有安装无限强度的正确政策。

这就是我解决它的方式:

  1. 从以下网址下载政策:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

  2. 解压缩并将 local_policy.jar US_export_policy.jar 放入$ {jdk -path} / jre / lib / security并覆盖现有文件。 (注意:不要把它放在JRE文件夹中。你必须将它放入jdk / jre / ...... ......这花了我几个小时:))

  3. 重新启动服务器,它可以正常工作!

  4. 希望有所帮助:)

答案 1 :(得分:0)

从Java 8u151开始,您可以使用以下属性来解决此问题:

Security.setProperty("crypto.policy", "unlimited");

答案 2 :(得分:0)

尝试升级到Java 8 JDK的新版本。

对我来说,我尝试了2个版本:

  • 1.8.131-失败
  • 1.8.201-成功