因為某些國家的進口管制限制,Java發布的運行環境包中的加解密有一定的限制。比如默認不允許256位密鑰的AES加解密,解決方法就是修改策略文件。
對於Java 8 Update 144和更早版本,需要安裝Java密碼學擴展(JCE)無限強度管轄權策略文件:
- 從此處下載無限強度的JCE策略文件
- 解壓縮下載的文件
- 用
$JAVA_HOME/jre/lib/security
提取的無限強度策略JAR文件替換現有的策略JAR文件
注意:如果您以后決定恢復到原始的受限策略版本,請首先在中備份原始JCE策略文件(US_export_policy.jar和local_policy.jar)
$JAVA_HOME/jre/lib/security
。
Java 8 Update 151及更高版本
包括了“無限強度管轄策略”,但默認情況下不使用。要啟用它,您需要java.security
在$JAVA_HOME/jre/lib/security
(對於JDK)或$JAVA_HOME/lib/security
(對於JRE)中編輯文件。取消注釋(或包括)該行:
crypto.policy=unlimited
官方網站提供了JCE無限制權限策略文件的下載:
JDK6的下載地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
JDK7的下載地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
JDK8的下載地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
使用反射修改JDK關鍵代碼
//這里是通過反射移除了isRestricted 的變量修飾符:final //然后將isRestricted 賦值為false即可 static { //break JCE crypto policy limit try { Class<?> clazz = Class.forName("javax.crypto.JceSecurity"); Field nameField = clazz.getDeclaredField("isRestricted");
Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(nameField, nameField.getModifiers() & ~Modifier.FINAL); nameField.setAccessible(true); nameField.set(null, java.lang.Boolean.FALSE); } catch (Exception ex) { ex.printStackTrace(); } }