我们都知道在登录账号密码的时候用户输入的密码一般也就6到8位,很容易被另有目的的黑客盗取,从而造成用户的损失。今天这篇文章讲的是MD5加密。
一.MD5低32位
public static String MD5Low32(String str) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
try {
md.update(str.getBytes("UTF8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer(200);
for (int offset = 0; offset < b.length; offset++) {
i = b[offset] & 0xff;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
return buf.toString();
} catch (NoSuchAlgorithmException e) {
Logs.e(e.toString());
return null;
}
}
二.MD5高32位
public static String MD5Up32(String str) {
return MD5Low32(str).toUpperCase(Locale.getDefault());
}
三
.MD5高16位
public static String MD5Up16(String str) {
return MD5Up32(str).substring(8, 24);
}
四
.MD5低16位
public static String Md5Low16(String str) {
return MD5Low32(str).substring(8, 24);
}
五.项目实战
我将密码变成:(原密码+加密钥匙)先MD5加密得到的值key,再加上"###"再用MD5加密:MD5(key+"###")。
private String getMd5(String pswStr) {
String key = Constant.key + pswStr;
key = MD5.MD5Low32(key);
key = "###" + MD5.MD5Low32(key);
try {
key = URLEncoder.encode(key, "utf-8");// URL编码
Logs.d(key);
// 它是一种编码类型。当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成application/x-www-form-urlencoded字符串。
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return key;
}
String pwStr:输入的原密码。
Constant.key工具类,可以自定义。比如我的就是个字符串:
key = "5tZwmk3TIaJ4ELVHzN";//加密钥匙