首先来了解一下什么是MD5
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
它是单向的加密算法,明文可以变成密文,但是通过密文无法解密成明文。
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据是非常困难的。
一般用途:
一般用于加密用户密码,请求参数,文件校验等
本篇文章将从java代码上开始让你了解MD5加密
正所谓加密,打个比方,用户登录输入密码,服务端将拿到从客户端传来的密文去和数据库中的数据对比,如果成功,将会返会成功信息。但如果用户的密码忘记了,选择找回密码时,一般都会让用户重新输入密码,这是为什么呢?为什么后台管理员不可以直接将密码告诉用户呢?
就是为了客户信息的安全性,管理员也不知道密码,因为他不能把密文解密成明文。这也极大的增强了信息的安全性。
那么让我们开始了解一下吧!
/**
这是一个加密Util
*/
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
/**
* MD5加密
* @param pass
* @return
*/
public static String md5pass(String pass) {
try {
MessageDigest md = MessageDigest.getInstance("md5");
byte[] res = md.digest(pass.getBytes());
StringBuffer buffer = new StringBuffer();
for(byte b :res) {
int num = b &0xff;
String str = Integer.toHexString(num);
if(str.length() == 1) {
buffer.append("0");
}
buffer.append(str);
}
return buffer.toString();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "";
}
}
}
这里需要用到一个MessageDigest类,也不用单独导包。
MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
下面是一个测试类
这里比如“123456”就是密码,通过调用MD5Util的md5pass方法,可以将密码加密成密文。
public class Md5Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String pass = "123456";
System.out.println(MD5Util.md5pass(pass));
}
}
一般在使用的时候,这些加密方法应该放在客户端,客户端只需要传递密文给服务端,服务端去数据库校验即可。
可以通过下面两个网址来查看MD5的加密和解密数据
MD5在线加密/解密
MD5在线加密