Java 加密后解密失敗和Illegal key size or default parameters

AES-256-ECB加密
主要遇到兩個(gè)坑:

  • Java 在Windows上面和Linux上面的SecureRandom對(duì)同一個(gè)種子生成的key不一樣,導(dǎo)致Linux上加密后的文件在windows上無(wú)法解密。
    原因 :
    SecureRandom 默認(rèn)隨機(jī)數(shù)生成器不一樣,Windows上默認(rèn)是 SHA1PRNG ,Linux大多數(shù)默認(rèn)是 NativePRNG, 除非調(diào)用方調(diào)用 getInstance 方法返回實(shí)例并指定隨機(jī)數(shù)生成器。

解決方案:

KeyGenerator kgen = KeyGenerator.getInstance("AES");
// 通過(guò)getInstance指定SecureRandom隨機(jī)數(shù)生成器
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );
// 指定種子為約定好的key
secureRandom.setSeed(sKey.getBytes());
kgen.init(256, secureRandom);


  • 運(yùn)行時(shí)報(bào)錯(cuò) Illegal key size or default parameters
    原因:美國(guó)限制 aes 256位 以上加密出口,于是Sun通過(guò)權(quán)限文件(local_policy.jar, US_export_policy.jar)做了相應(yīng)限制。
    Oracle在其官方網(wǎng)站上提供了無(wú)政策限制權(quán)限文件(Unlimited Strength Jurisdiction Policy Files),只需要將其部署在JRE環(huán)境中,就可以解決限制問(wèn)題。

解決方案:
下載對(duì)應(yīng)版本的jce包,解壓并放到 jdk 文件夾下的 /jre6/lib/security 文件夾中
下載地址:
https://www.oracle.com/technetwork/java/javase/downloads/jce-all-download-5170447.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容