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);