import com.qiniu.util.Base64; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.spec.AlgorithmParameterSpec;
/**
- AES 是一种可逆加密算法,对用户的敏感信息加密处理
- 对原始数据进行AES加密后,在进行Base64编码转化;
- @author
- @time 2017/11/27 15:54
- 填充:zeropadding 128位
- 模式:CBC
- 密码:Kbj.543Lbwb5kNbP
- 偏移量:B*L032Ykls9-g858
/ public class AesCBCUtil { //私钥 AES固定格式为128/192/256 bits.即:16/24/32bytes public static final String APP_LOGIN_IN_KEY = "Kbj.543Lbwb5kNbP"; //初始化向量参数,AES 为16bytes public static final String GIV = "BL032Ykls9-g858";
/**
* CBC
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static String encrypt(String data, String key) {
// Logger.getInstace().i("[Data-Original]", data); try { 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(GIV.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
byte[] encrypted = cipher.doFinal(plaintext);
//return new sun.misc.BASE64Encoder().encode(encrypted);
String datakey = Base64.encodeToString(encrypted, 0)
.replace("\n", "").trim();
// Logger.getInstace().i("[Data-AesCBC]", datakey); return datakey; } catch (Exception e) { e.printStackTrace(); return null; } }
/**
* 替换指定字符串
*/
// public static String replaceStr(String str) { // return str.replace("+", "__2B").replace("/", "__2F").replace("=", "__2C"); // }
/**
* 解码
*
* @param str
* @param key
*/
public static String AES_Decode(String str, String key) {
try {
// str = replaceEnStr(str); byte[] textBytes = Base64.decode(str, 0); // byte[] textBytes = str.getBytes("UTF-8"); AlgorithmParameterSpec ivSpec = new IvParameterSpec(GIV.getBytes("UTF-8")); SecretKeySpec newKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); cipher.init(Cipher.DECRYPT_MODE, newKey, ivSpec); return new String(cipher.doFinal(textBytes), "UTF-8").replace("\n", "").trim(); } catch (Exception e) { e.printStackTrace(); return null; } }
/**
* 替换指定字符串
*/
// public static String replaceEnStr(String str) { // return str.replaceAll("__2B", "+").replaceAll("__2F", "/").replaceAll("__2C", "="); // } public static void main(String[] args) { //866297039791111 String str = "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"; String en = AesCBCUtil.encrypt(str, "Kbj.543Lbwb5kNbP"); System.out.println("加密 数据 串en:" + en);
String dr = AesCBCUtil.AES_Decode(str, "Kbj.543Lbwb5kNbP");
System.out.println("解密 数据 串dr:" + dr);
}
}