1. 程式人生 > >關於AES在Linux下加密解密出錯問題解決方案

關於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

PRNG");

//需要自己手動設定,在liunx下需要手動指定隨機型別,否則每次生成會不一樣的密碼,解密是也是需要這步

random.setSeed(pwd.getBytes());

keyGen.init(128, random);

SecretKey skey = keyGen.generateKey();

byte[] raw = skey.getEncoded();

SecretKeySpec skeySpec =new SecretKeySpec(raw,"AES");