關於AES在Linux下加密解密出錯問題解決方案
現象描述:
windows
上加解密正常,
linux
上加密正常,解密時發生如下異常
:
javax.crypto.BadPaddingException:
Given final block not properly
padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at
com.sun.crypto.provider.AESCipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at chb.test.crypto.AESUtils.crypt(AESUtils.java:386)
at chb.test.crypto.AESUtils.AesDecrypt(AESUtils.java:254)
at chb.test.crypto.AESUtils.main(AESUtils.java:40)
解決後代碼如下:
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
String pwd ="passordgggggg";
SecureRandom random=SecureRandom.getInstance("SHA1
//需要自己手動設定,在liunx下需要手動指定隨機型別,否則每次生成會不一樣的密碼,解密是也是需要這步
random.setSeed(pwd.getBytes());
keyGen.init(128, random);
SecretKey skey = keyGen.generateKey();
byte[] raw = skey.getEncoded();
SecretKeySpec skeySpec =new SecretKeySpec(raw,"AES");