解决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();
}
}

浙公网安备 33010602011771号