package com.sms.utils;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONObject;
public class AESUtils {
public static String key = "123456!@#";
public static String iv = "1234567812345678";
/**
* 加密
*
* @param data
* @return
*/
public static String encrypt(String data) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
int blockSize = cipher.getBlockSize();
byte[] dataBytes = data.getBytes();
int plaintextLength = dataBytes.length;
if (plaintextLength % blockSize != 0) {
plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
}
byte[] plaintext = new byte[plaintextLength];
System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
byte[] encrypted = cipher.doFinal(plaintext);
return Base64.encodeBase64String(encrypted);
}
/**
* 解密
*
* @param data
* @return
*/
public static String desEncrypt(String data) throws Exception {
//base64加密串在http中会把"+"号变为" "
data = StringUtils.replace(data, " ", "+");
// byte[] contentBytes = Base64.decode(data, 0);
byte[] contentBytes = Base64.decodeBase64(data);
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
byte[] original = cipher.doFinal(contentBytes);
String originalString = new String(original);
return originalString;
}
public static void main(String[] args) throws Exception {
Map<String, String> map = new HashMap<String, String>();
// map.put("username", "admin");
// map.put("password", "123456");
System.out.println(AESUtils.encrypt(JSONUtil.toJson(map)));
}
}