使用AES加密时,当密钥大于128时,代码会抛出java.security.InvalidKeyException: Illegal key size or default parametershtml
Illegal key size or default parameters是指密钥长度是受限制的,java运行时环境读到的是受限的policy文件。文件位于${java_home}/jre/lib/securityjava
这种限制是由于美国对软件出口的控制。算法
解决方法:安全
Java几乎各类经常使用加密算法都能找到对应的实现。由于美国的出口限制,Sun经过权限文件(local_policy.jar、US_export_policy.jar)作了相应限制。所以存在一些问题:
●密钥长度上不能知足需求(如:java.security.InvalidKeyException: Illegal key size or default parameters);
●部分算法未能支持,如MD四、SHA-224等算法;
●API使用起来还不是很方便;一些经常使用的进制转换辅助工具未能提供,如Base64编码转换、十六进制编码转换等工具。服务器
Oracle在其官方网站上提供了无政策限制权限文件(Unlimited Strength Jurisdiction Policy Files),咱们只须要将其部署在JRE环境中,就能够解决限制问题。
下载地址:
●Java 5.0 无政策限制文件
●Java 6 无政策限制文件
●Java 7 无政策限制文件
●其余版本 无政策限制文件oracle
下载的压缩包中仅有一个目录,也就是jce目录。该目录中包含了4个文件:README.txt、COPYRIGHT.html、local_policy.jar和US_export_policy.jar。其中包含的两个jar文件正是这次配置中用到的文件。
咱们能够查看上述README.txt文件,你须要在JDK的JRE环境中,或者是JRE环境中配置上述两个jar文件。
切换到%JDK_Home%\jre\lib\security目录下,对应覆盖local_policy.jar和US_export_policy.jar两个文件。同时,你可能有必要在%JRE_Home%\lib\security目录下,也须要对应覆盖这两个文件。
配置权限文件的最终目的是为了使应用在运行环境中得到相应的权限,能够增强应用的安全性。一般,咱们在应用服务器上安装的是JRE,而不是JDK。所以,这就颇有必要在应用服务器的%JRE_Home%\lib\security目录下,对应覆盖这两个权限文件。不少开发人员每每忽略了这一点,致使事故发生。工具