Java代码实现简单可逆加解密
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class SecureStorageTool {
private static final String AES="AES";
private static final String CHAR_SET_NAME1="UTF-8";
private static final String CHAR_SET_NAME2="ASCII";
private static final String CIPHER_KEY="AES/CBC/PKCS5Padding";
/**
* 加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,key需要为16位。
*/
private static final String IV_PARAMETER="kuc#fcp84d2x.pr8";
/**
* 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,需要为16位。
*/
private static final String S_KEY="idpj587l0#4@7oj7";
/**
* 加密
* @param param
* @return
* @throws Exception
*/
public static String encryption(String param) {
if(param==null) {
return null;
}
if(param.isEmpty()) {
return "";
}
String encode = "";
try {
Cipher cipher= Cipher.getInstance(CIPHER_KEY);
SecretKeySpec skeySpec = new SecretKeySpec(S_KEY.getBytes(), AES);
// 使用CBC模式,需要一个向量iv,可增加加密算法的强度
IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
// 此处使用BASE64做转码。
encode = new BASE64Encoder().encode(cipher.doFinal(param.getBytes(CHAR_SET_NAME1)));
} catch (Exception e) {
encode = null;
}
return encode;
}
/**
* 解密
* @param value
* @return
* @throws Exception
*/
public static String decrypt(String value) {
if(value==null) {
return null;
}
if(value.isEmpty()) {
return "";
}
String decode = "";
try {
SecretKeySpec skeySpec = new SecretKeySpec(S_KEY.getBytes(CHAR_SET_NAME2), AES);
Cipher cipher = Cipher.getInstance(CIPHER_KEY);
IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
// 先用base64解密
decode = new String(cipher.doFinal(new BASE64Decoder().decodeBuffer(value)), CHAR_SET_NAME1);
} catch (Exception e) {
decode = null;
}
return decode;
}
/**
测试
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String key="usemeiguogou";
System.out.println("key="+key);
//输出 key=123
String value=encryption(key);
System.out.println("encryption value="+value);
//输出 encryption value=OTslJ40Fa9a7ImOmCbmLPw==
System.out.println("decrypt:"+decrypt(" "));
//输出 decrypt key=123
}
}
mysql数据库自带函数加解密
加密
HEX(AES_ENCRYPT(#{},<include refid="key" />))
解密
AES_DECRYPT(UNHEX(),<include refid="key" />)