Linux和Windows下使用AES加解密的問題

最近發(fā)現一個很奇怪的問題贺喝,使用JAVA對字符串進行加密和解密在WIndows下工作正常译秦,但是運行在Linux下出現加密后的數據無法解密的問題:

加密代碼如下:

public static String encode(String encodeRules, String content) {
        try {
            KeyGenerator keygen = KeyGenerator.getInstance("AES");
            keygen.init(128, new SecureRandom(encodeRules.getBytes("utf-8")));
            SecretKey original_key = keygen.generateKey();
            byte[] raw = original_key.getEncoded();
            SecretKey key = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] byte_encode = content.getBytes("utf-8");
            byte[] byte_AES = cipher.doFinal(byte_encode);
            String AES_encode = Base64.getEncoder().encodeToString(byte_AES);
            return AES_encode;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

例如我對JSON 字符串 {"success":true,"time":1582687291097,"username":"DMPODADMIN"}進行加密,在WIndows系統下加密出來的字符串為:TVj2MSHum4Xp0fBzQyr68En5xvjKvPMIl6h8uwnGyJa7DuIDVQpF27lexECE84DPpO+LfieDPtJXz/s9OF7eyg==且可以正常解密,但是在Linux系統下加密出來的字符串為:rMK9wEQ4LgLRjLC2uqZy4FKEwEHgARfY0SizKMaf/Cfy43b0kXUxKDppHnKtEV9mWY3oOKvmgIT1YqsRjSdbUw==而且在解密的時候報錯:

javax.crypto.BadPaddingException: Given final block not properly padded
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:991)
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:847)
    at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
    at javax.crypto.Cipher.doFinal(Cipher.java:2164)
    at com.company.AESEncoder.decrypt(AESEncoder.java:59)
    at com.company.Main.main(Main.java:10)

而且還有一點比較奇怪的是linux下每次加密出來的結果都不同客燕,第二次運行加密和解密出來的結果是:

MQhmM0RtIfE+8VOVxTiFgz3vXOd+vMeVqnEJDxBrVA4bBgpFERiQMUNBcMd/L1sIrUtPq40dGQhTDQ/ALtO5Vg==
javax.crypto.BadPaddingException: Given final block not properly padded
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:991)
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:847)
    at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
    at javax.crypto.Cipher.doFinal(Cipher.java:2164)
    at com.company.AESEncoder.decrypt(AESEncoder.java:59)
    at com.company.Main.main(Main.java:10)

可以看到加密出來的字符串與第一次不同,并且解密同樣還是出錯狰贯,于是就懷疑應該是加密的Key這里出了問題也搓,導致每次的加密結果不同赏廓。查詢資料后發(fā)現是keygen.init(128, new SecureRandom(encodeRules.getBytes("utf-8")));這一段代碼有問題。原因是SecureRandom 實現完全隨操作系統本身的內部狀態(tài)傍妒,除非調用方在調用 getInstance 方法之后又調用了 setSeed 方法幔摸;該實現在 windows 上每次生成的 key 都相同,但是在 solaris 或部分 linux 系統上則不同颤练。所以我們看到每次Linux上加密的結果不同既忆。于是將相應的代碼修改成:

SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(encodeRules.getBytes("utf-8"));
keygen.init(128, secureRandom);

再次測試之后加解密成功。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末嗦玖,一起剝皮案震驚了整個濱河市患雇,隨后出現的幾起案子,更是在濱河造成了極大的恐慌宇挫,老刑警劉巖苛吱,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異器瘪,居然都是意外死亡翠储,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門娱局,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彰亥,“玉大人,你說我怎么就攤上這事衰齐。” “怎么了继阻?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵耻涛,是天一觀的道長。 經常有香客問我瘟檩,道長抹缕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任墨辛,我火速辦了婚禮卓研,結果婚禮上,老公的妹妹穿的比我還像新娘睹簇。我一直安慰自己奏赘,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布太惠。 她就那樣靜靜地躺著磨淌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凿渊。 梳的紋絲不亂的頭發(fā)上梁只,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天缚柳,我揣著相機與錄音,去河邊找鬼搪锣。 笑死秋忙,一個胖子當著我的面吹牛,可吹牛的內容都是我干的构舟。 我是一名探鬼主播灰追,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼旁壮!你這毒婦竟也來了监嗜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤抡谐,失蹤者是張志新(化名)和其女友劉穎裁奇,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體麦撵,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡刽肠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了免胃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片音五。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖羔沙,靈堂內的尸體忽然破棺而出躺涝,到底是詐尸還是另有隱情,我是刑警寧澤扼雏,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布坚嗜,位于F島的核電站,受9級特大地震影響诗充,放射性物質發(fā)生泄漏苍蔬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一蝴蜓、第九天 我趴在偏房一處隱蔽的房頂上張望碟绑。 院中可真熱鬧,春花似錦茎匠、人聲如沸格仲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抓狭。三九已至,卻和暖如春造烁,著一層夾襖步出監(jiān)牢的瞬間否过,已是汗流浹背午笛。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苗桂,地道東北人药磺。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像煤伟,于是被迫代替她去往敵國和親癌佩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容