MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2、MD3和MD4发展而来。
MD5算法的使用不需要支付任何版权费用。
百度上搜MD5会出现一大堆加密解密,但实际上MD5不是一种加密算法,只是一种算法,因为它是一个不可逆的过程,即 MD5 生成消息摘要后是不能通过结果解析得到原来的内容。
MD5用途
MD5生成的消息摘要通常的用途是用来校验文件的完整性。
通过接收到的文件进行MD5摘要校验对比,就能得出文件在传输过程中有没有被篡改。
在 MySQL 官网上的下载网页也提供了各版本文件的 MD5 供用户下载后校验。
防止直接获取明文
由于MD5在生成后无法进行反向解析,加密后会像上面图中一样,只有一串16进制的字符数组,无法获取原本的内容是什么(其实上图中的MD5字符,是使用Java自带的MD5工具对“123456”进行处理后得到的);所以通常也可以用于传输一些私密信息,像用户密码。
以 Web 应用为例,前台页面输入密码后,可以通过MD5加密,然后直接将 MD5字符串 保存到数据库中,当用户登录时只需将数据库中的 MD5字符串获取并与之输入的密码MD5字符串比对即可通过验证。
MD5实际使用
此处以 Java 语言示例
//创建 MD5 消息摘要实例
MessageDigest md5 = MessageDigest.getInstance("MD5");
String password = "123456";
// 将需要生成消息摘要的内容加入到 MD5 中
md5.update(password.getBytes("utf-8"));
// 就得到了 MD5 处理后的消息摘要的字节数组
byte[] b = md5.digest();
// 将字节数组转换成 16进制 的字符数组(方法不写出来了,自行百度“字节数组转16进制字符数组”)
String md5Pwd = byteToHexString(b);
// 或者 直接使用编码工具进行编码
BASE64Encoder encoder = new BASE64Encoder();
// MD5 字符串
String md5Pwd = encoder.encode(b);
// md5Pwd = 4QrcOUm6Wau+VuBX8g+IPg==