1、为什么
在一个Web系统中,如果注册用户的密码直接以明文的方式存储,则数据库管理员可以直接查看所有用户的密码;如果数据库被黑客侵入,则会造成用户信息的泄漏。为了避免这样的情况发生,通常采用加密技术对用户的密码进行加密之后在存储到数据库中,
2、MD5加密算法简介
MD5(Message Digest)是一种加密算法,能够对字节数组进行加密,有如下特点。
- 不能根据加密后的信息(密文)得到加密前的信息(明文)
- 对于不同的明文,加密后的密文是不相同的。
注:在这里不介绍该算法的具体实现原理,如果感兴趣的可以查阅相关资料
3、MD5算法的实现
在java类库中,java.security.MessageDigest 和 sun.misc.BASE64Encoder类提供了对MD5算法实现的支持,因此不用了解MD5算法的细节也能实现它。基本过程如下;
- 把要加密的字符串转换成字节数组。
- 获取MessageDigest对象,利用该对象的digest方法完成加密,返回字节数组。
- 将字节数组利用base64算法转换成等长的字符串。
4、代码实现
import sun.misc.BASE64Encoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class md5 {
public static void main(String [] args){
String abc = md5.MD5("abc");
System.out.println(abc);
System.out.println(md5.MD5("fugaoyang"));
//输出结果
//kAFQmDzST7DWlj99KOF/cg==
//Nz6xhJ3J7fqFDXcmjJBFKQ==
}
public static String MD5(String oldStr){
byte[] oldStrBytes = oldStr.getBytes();
MessageDigest md5;
try {
md5 = MessageDigest.getInstance("MD5");
byte[] digest = md5.digest(oldStrBytes);
BASE64Encoder base64Encoder = new BASE64Encoder();
String newStr = base64Encoder.encode(digest);
return newStr;
}catch (NoSuchAlgorithmException e){
return null;
}
}
}
参考:JavaWeb应用开发技术与案例教程