破解AES祕鑰長度限制

破解AES祕鑰長度限制

高級加密標準

  • AES:在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES。

密碼說明

  • 因爲Rijndael加密法可以支持更大範圍的區塊和密鑰長度:AES的區塊長度固定爲128比特,密鑰長度則可以是128,192或256比特;而Rijndael使用的密鑰和區塊長度均可以是128,192或256比特。加密過程中使用的密鑰是由Rijndael密鑰生成方案產生。

加密限制

  • 因爲某些國家的進口管制限制,Java發佈的運行環境包中的加解密有一定的限制。比如默認不允許256位密鑰的AES加解密。

應對策略

//這裏是通過反射移除了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();
        }
    }
  • 方法三:使用crypto.policy 解除受限加密

所需版本:Java 8 Update 151 (8u151)

在以前的發行版中,JCE 權限文件必須單獨下載和安裝,才能允許 JDK 使用不受限加密。現在,不再需要下載和安裝步驟。要啓用不受限加密,用戶可以使用新的 crypto.policy 安全屬性。

官方鏈接:—— [ Java 8 發行版要點說明 ]

文章摘錄:

Java 8 Update 151 (8u151)
發行版要點說明

新增功能:用於控制加密策略的新安全屬性
本發行版引入了一項新功能,使得可以通過新安全屬性控制 JDK 使用的 JCE 權限策略文件。在以前的發行版中,JCE 權限文件必須單獨下載和安裝,才能允許 JDK 使用不受限加密。現在,不再需要下載和安裝步驟。要啓用不受限加密,用戶可以使用新的 crypto.policy 安全屬性。如果在 java.security 文件中設置了新安全屬性 (crypto.policy),或者在初始化 JCE 框架之前已經使用 Security.setProperty() 調用來動態設置了該安全屬性,則將遵循該設置。默認情況下,此屬性未定義。如果此屬性未定義,並且傳統 lib/security 目錄中不存在傳統的 JCE 權限文件,則默認加密級別將保留爲“受限”。要將 JDK 配置爲使用不受限加密,請將 crypto.policy 設置爲“無限制”值。有關詳細信息,請參閱本發行版隨附的 java.security 文件中的說明。
注:在 Solaris 上,建議刪除舊 SVR4 包,然後再安裝新的 JDK 更新。如果在早於 6u131、7u121、8u111 的 JDK 發行版上完成了基於 SVR4 的升級(不卸載舊包),則您應在 java.security 文件中設置新的 crypto.policy 安全屬性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章