解决Linux下Java DES文件加密解密 javax.crypto.BadPaddingException: Given final block not properly padded

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) 

解决方法:

经过检查之后,定位在生成KEY的方法上,如下:

public static SecretKey initKeyForAES(String strKey) {   

try {     

KeyGenerator kgen = KeyGenerator.getInstance("AES");    

kgen.init(128, new SecureRandom(key.getBytes()));   

SecretKey secretKey = kgen.generateKey(); 

return secrekey; 

 }  catch (Exception e) {       

throw new NoSuchAlgorithmException();  

} 

 修改到如下方式,问题解决 :

public static SecretKey initKeyForAES(String strKey) {      

 try { 

  KeyGenerator kgen = KeyGenerator.getInstance("AES");  

  SecureRandom secureRandom=SecureRandom.getInstance("SHA1PRNG");        

  secureRandom.setSeed(strKey.getBytes());        

  kgen .init(128,secureRandom);       

 return kgen.generateKey();      

}  catch (Exception e) {         

 throw new NoSuchAlgorithmException();     

}    

}

 

posted @ 2016-01-08 16:15  猛龙飞天  阅读(908)  评论(0)    收藏  举报