MD5:(利用哈希数,是一种散列函数的应用)
哈希,散列的特点:
1.算法公开
2.对相同的数据进行计算,得到的结果一致
3.结果为32位的16进制数(0~f):
不论是一个字符,还是一段视频,音频,都是32位,甚至32的哈希码自己进行计算也同样得到32位的结果。
MD5的主要应用:
1.密码加密(不可逆)
2.搜索
3.版权
4.文件完整性校验
下图是md5使用的一个封装函数:
截自视频
这个腾讯视频讲的还可以 还提了一下给自己的密码增加困难度。https://v.qq.com/x/page/n0325suarl6.html
再提供一个同功能源码:
package site.cnkj.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
public class MD5Util {
public static String md5str(String data) {
MessageDigest mdDigest;
StringBuffer stringBuffer = new StringBuffer();
Random random = new Random();
data = data +88;
try {
mdDigest = MessageDigest.getInstance("md5");
// 进过计算 md5算法处理之后的字节码
byte[] databytes = data.getBytes();
mdDigest.update(databytes);
byte[] md5dis = mdDigest.digest();
// 如何把一个16长度的 byte 数组变成32位长度的16进制形式
for (int i = 0; i < md5dis.length; i++) {
byte b = md5dis[i];
// 一个 byte 等于8个字节,4个 bit 表示一个16进制
// 变成16进制形式,最长2位
String tempstr = Integer.toHexString(b & 0xff);
if (tempstr.length() < 2) {
tempstr = "0" + tempstr;
}
stringBuffer.append(tempstr);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return stringBuffer.toString();
}
}