理论上说MD5加密是不可逆的,就是说除了 密码的输入者,其他人都不可能知道输入的内容。应用范围:加密! 用它加密后就算是数据库管理员也不会知道用户存入的密码是什么。
但是有个问题是...怎么找回密码? 答案是:用MD5加密后如果你忘了密码,那就找不回来了。但可以重置密码。好看下么面的实例吧:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;
import javax.swing.JOptionPane;
/*
* 演示:用MD5给"安全提问"和"密码"加密
*/
public class TestMD5 {
public final static String calc(String str) {
// 如果str为null则给是赋值为""否则赋值为str
String s = str == null ? "" : str;
// 数据字典
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
// 获取s的二进制
byte[] strTmp = s.getBytes();
try {
// 召唤MD5加密器
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
// 执行加密
mdTemp.update(strTmp);
// 获取加密结果
byte[] md = mdTemp.digest();
// 结果的长度
int j = md.length;
// 字符数组
char str1[] = new char[j * 2];
int k = 0;
// 将二进制的加密结果转换为字符
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str1[k++] = hexDigits[byte0 >>> 4 & 0xf];
str1[k++] = hexDigits[byte0 & 0xf];
}
// 输出加密后的字符
return new String(str1);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
/**
* 测试输入匹配
*
*/
public void checkInfo() {
System.out.println("输入安全提问答案:");
Scanner sc=new Scanner(System.in);
String question=sc.next();
if(this.calc("12377799").equals(this.calc(question))){
System.out.println("答案正确!");
}else{
JOptionPane.showMessageDialog(null, "答案错误!");
}
}
public static void main(String[] args) {
TestMD5 tmd5 = new TestMD5();
System.out.println("安全提问答案:12377799---->加密后:" + tmd5.calc("12377799"));
System.out.println("密码:199007--->加密后:" + tmd5.calc("199007"));
tmd5.checkInfo();
}
}