用java实现MD5密码加密

理论上说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();

}

}



你可能感兴趣的:(java,MD5,数据库,加密)