package com.rd.p2p.common.util;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import com.rd.p2p.common.util.code.BASE64Decoder;
import com.rd.p2p.common.util.code.BASE64Encoder;
/**
* base64加盐算法
*
*/
public class SaltUtil {
/**
* 字符串Base64位加密
* @param str
* @return
*/
public static Map<String, Object> base64Encode(String string) {
Map<String, Object> data = new HashMap<String, Object>();
// 生成6位随机数
String salt = getSalt();
// 重新封装
String str = string + salt;
// base64加密
BASE64Encoder encoder = new BASE64Encoder();
String result = encoder.encode(str.getBytes());
data.put("result", result);
data.put("salt", salt);
return data;
}
/**
* 字符串Base64位解密
* @param str
* @return
* @throws IOException
*/
public static String base64Decode(String str, String salt) {
try {
if (StringUtil.isNotBlank(str)) {
BASE64Decoder decoder = new BASE64Decoder();
String string = decoder.decodeStr(str);
String result = string.replaceAll(salt, "");
return result;
} else {
return null;
}
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
private static String getSalt() {
String[] ValidStr={"0","1","2","3","4","5","6","7","8","9",
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","p","q","r","s","t","u","v","w","x","y","z"};
int number=ValidStr.length;
String salt = "";
Random random = new Random();
for (int i = 0; i < 6; i++) {
String rand = String.valueOf(ValidStr[random.nextInt(number)]);
salt += rand;
}
return salt;
}
}
这里采用随机6位字符串+需要加密的字符串生成一条新的字符串,然后对该字符串进行base64加密(加密工具类可以参考我写的关于base64的工具类),将加密后的字符串和salt存到数据库中,需要时再进行解密操作。如果是密码等可以采用MD5进行加密,防止数据库密码泄漏。