版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZhuangM_888/article/details/51628641
首先,必须强调一点,MD5不是加密算法,确切的说是一种消息摘要算法,具有不可逆性。通俗的讲,字符串、文件等通过MD5处理后,可以生成一个固定长度为128位的二进制串。(通常将其转换成16进制字符串,可以用于密码校验等)
加密算法和消息摘要算法有何区别?
1、加密算法具有相应地解密算法,通过加密算法对信息进行加密后,采用解密算法能够获取到原始数据。
2、采用摘要算法得到的数据是不完整的,无法反向获取到原始数据。
MD5作用:
1、一致性校验,系统登录、注册等。
2、数字签名,可以将MD5生成的串看成一个指纹。
Java实现MD5摘要算法:
package demo;
import java.security.MessageDigest;
public class MD5 {
// test
public static void main(String[] args) {
System.out.println(getMD5Code("shanghai"));
System.out.println(getMD5Code("beijing"));
System.out.println(getMD5Code("shanghai"));
}
private MD5() {
}
// md5加密
public static String getMD5Code(String message) {
String md5Str = "";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] md5Bytes = md.digest(message.getBytes());
md5Str = bytes2Hex(md5Bytes);
}catch(Exception e) {
e.printStackTrace();
}
return md5Str;
}
// 2进制转16进制
public static String bytes2Hex(byte[] bytes) {
StringBuffer result = new StringBuffer();
int temp;
try {
for (int i = 0; i < bytes.length; i++) {
temp = bytes[i];
if(temp < 0) {
temp += 256;
}
if (temp < 16) {
result.append("0");
}
result.append(Integer.toHexString(temp));
}
} catch (Exception e) {
e.printStackTrace();
}
return result.toString();
}
}
运行结果:
22638a3131d0f0a7346b178fd29f939c
0420a206ae8b77b60f314a33b38c875a
22638a3131d0f0a7346b178fd29f939c
end.