linux系統下,AES解密失敗,報錯信息以下:html
javax.crypto.BadPaddingException: Given final block not properly paddedjava
windows操做系統下,使用AES進行加密、解密正常;linux
在Linux下,相同的待加密字符串,每次加密結果都不同,並且解密失敗。算法
緣由:因爲key的生成方式不一樣引發的!windows
// 強隨機數生成器 SecureRandom random = new SecureRandom(password.getBytes(ENCODING))
上面的強隨機數生成器,並無指定算法名稱,因此,會根據操做系統的生成隨機數,dom
因爲windows和linux的內核不一樣,所以生成的隨機數也會不一樣,因此致使解密失敗!加密
因爲SecureRandom沒有指定算法名稱時,隨機數的生成會隨操做系統自己的內部狀態而變化,操作系統
因此,咱們須要手動指定隨機數的生成規則,如何實現?htm
在調用 getInstance 方法以後,再調用 setSeed 方法;blog
// 只適用windows // kgen.init(128, new SecureRandom(password.getBytes(ENCODING))); // 指定強隨機數的生成方式 // 兼容linux SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); random.setSeed(password.getBytes(ENCODING)); kgen.init(128, random);