import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Md5Utils {
private static final String YAN = "isgu&*%^2345UTF23(*&ywtdfkxjf47";
//YAN是随意设置的一串字母符号数字,跟密码原文组合到一起进行MD5算法加密,以起到混淆作用,可以有效干扰对密码的暴力破解
public static String md5Encrypt(String password) {
try {
password= YAN+password;
StringBuffer sb = new StringBuffer();
MessageDigest digest = MessageDigest.getInstance("md5");// algorithm
byte[] bytes = digest.digest(password.getBytes()); // 参数是,明文字节数组,返回的就是加密后的结果,字节数组
for (byte b : bytes) { // 数byte 类型转换为无符号的整数
int n = b & 0XFF; // 将整数转换为16进制
String s = Integer.toHexString(n); // 如果16进制字符串是一位,那么前面补0
if (s.length() == 1) {
sb.append("0" + s);
} else {
sb.append(s); }
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace(); } return null; }
}
应用:
设置密码时:
String encryStr = Md5Utils.md5Encrypt(pwd1);//对输入的密码进行MD5加密
//保存加密后的结果 sp 就是SharedPreferences
sp.edit().putString("safe_key", encryStr).commit();
验证密码时:
//判断密码是否正确
//对用户输入的密码进行MD5加密
String encryPwd = Md5Utils.md5Encrypt(pwd1); //获得之前保存的密码密文
String oldPwd = sp.getString("safe_pwd", null);
if(oldPwd.equals(encryPwd)){ //密码正确 可以进入
MyUtils.showToast(ctx, "密码正确");
}else{
MyUtils.showToast(ctx, "密码不正确,请重新输入");
}