MD5是什么:
MD5信息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值,用于确保信息传输完整一致。
特点:
只能加密不能解密,至于网上的MD5解密,只是利用大数据进行匹配
应用:
用于密码管理
不将密码以明文的方式存入数据库中,而是经过MD5加密后再存入数据库,进行登入判断时,只需将输入的密码进行MD5加密,再和数据库中对应的密码进行比较即可。不推荐
电子签名
用于各种文件加密,防止抵赖,也就是防止文件被纂改。
垃圾邮件筛选
利用 MD5 算法在邮件接收服务器上进行垃圾邮件的筛选,以减少此类邮件的干扰。
- 指定一个相同邮件出现的次数(3)
- 将接收道德邮件进行MD5加密
- 统计各个邮件的数量,加密后的
- 如果次数为3则不接收
- 否则接收
文件完整性校验
缺点:
-
MD5算法无法防止碰撞,因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途.
-
将用户的密码直接MD5后存储在数据库中是不安全的。
MD5具体实现代码:
public final class MD5 {
public static String encrypt(String strSrc) {
try {
char hexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'a', 'b', 'c', 'd', 'e', 'f' };
byte[] bytes = strSrc.getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(bytes);
bytes = md.digest();
int j = bytes.length;
char[] chars = new char[j * 2];
int k = 0;
for (int i = 0; i < bytes.length; i++) {
byte b = bytes[i];
chars[k++] = hexChars[b >>> 4 & 0xf];
chars[k++] = hexChars[b & 0xf];
}
return new String(chars);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
throw new RuntimeException("MD5加密出错!!+" + e);
}
}
public static void main(String[] args) {
System.out.println(MD5.encrypt("111111"));
}
}