在java中不能用PKCS7Padding的填充方式,遂解密会失败,改为PKCS5Padding。
AES/CBC/PKCS5Padding加解密
public class AesCBC {
private static String sKey="";
private static String ivParameter="";
private static AesCBC instance=null;
private AesCBC(){
}
public static AesCBC getInstance(){
if (instance==null)
instance= new AesCBC();
return instance;
}
public String encrypt(String sSrc, String encodingFormat, String sKey, String ivParameter) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] raw = sKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes(encodingFormat));
return new BASE64Encoder().encode(encrypted);
}
public String decrypt(String sSrc, String encodingFormat, String sKey, String ivParameter) throws Exception {
try {
byte[] raw = sKey.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original,encodingFormat);
return originalString;
} catch (Exception ex) {
return null;
}
}
public static void main(String[] args) throws Exception {
String cSrc = "我来自中国";
System.out.println(cSrc);
long lStart = System.currentTimeMillis();
String enString = AesCBC.getInstance().encrypt(cSrc,"utf-8",sKey,ivParameter);
System.out.println("加密后的字串是:"+ enString);
long lUseTime = System.currentTimeMillis() - lStart;
System.out.println("加密耗时:" + lUseTime + "毫秒");
lStart = System.currentTimeMillis();
String DeString = AesCBC.getInstance().decrypt(enString,"utf-8",sKey,ivParameter);
System.out.println("解密后的字串是:" + DeString);
lUseTime = System.currentTimeMillis() - lStart;
System.out.println("解密耗时:" + lUseTime + "毫秒");
}
}