有没有发现MD5 加密之后的长度是一样的,不管原本的信息有多长。这是因为 MD5 是摘要算法,有点类似于从你要加密的信息中选取一部分信息出来加密,所以即使你得到了 MD5 加密之后的结果,也很难从一部分信息中反推出原本的完整信息。另外,MD5 也是存在被破解的情况,那就是最传统的破解方法,从一堆数据中一个个去试。所以, MD5 可以设置一个盐值,类似于干扰信息,可以降低被破解的概率。
jdk提供的MD5加密
package com.jun.MD;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class JDKmd5 {
private static String src="ysj";
public static void main(String[] args) throws NoSuchAlgorithmException {
jdkMD5();
}
public static void jdkMD5() throws NoSuchAlgorithmException {
//获取实例,执行准换
MessageDigest md= MessageDigest.getInstance("MD5");
byte[] digest = md.digest(src.getBytes());
//将byte[] 转换成16进制输出
System.out.println(bytes2hex(digest));
}
//将字节数组转换成16进制方法
public static String bytes2hex(byte[] bytes)
{
final String HEX = "0123456789abcdef";
StringBuilder sb = new StringBuilder(bytes.length * 2);
for (byte b : bytes)
{
// 取出这个字节的高4位,然后与0x0f与运算,得到一个0-15之间的数据,通过HEX.charAt(0-15)即为16进制数
sb.append(HEX.charAt((b >> 4) & 0x0f));
// 取出这个字节的低位,与0x0f与运算,得到一个0-15之间的数据,通过HEX.charAt(0-15)即为16进制数
sb.append(HEX.charAt(b & 0x0f));
}
return sb.toString();
}
}
//结果
805309b2a84c9550d62718f314d7b2ff
常见情况将密码进行加密存储到数据库,来保证密码安全。