MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
1、java自带MD5算法
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* @Auther: wuyilong
* @Date: 2019/4/17 09:10
* @Description:
*/
public class MD5 {
public static String md5(String text) {
byte[] secretBytes = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(text.getBytes());
secretBytes = md.digest();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有MD5这个算法");
}
// 将加密后的数据转换为16进制数字
String md5code = new BigInteger(1, secretBytes).toString(16);
// 如果生成数字未满32位,需要前面补0
for(int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
public static void main(String[] args) {
String str = "123";
System.out.println(md5(str));
}
}
2、commons-codec提供的MD5算法
在maven文件中加入依赖
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
import org.apache.commons.codec.digest.DigestUtils;
/**
* @Auther: wuyilong
* @Date: 2019/4/17 09:10
* @Description:
*/
public class MD5 {
public static String md5(String text, String key) {
String encodeStr = DigestUtils.md5Hex(text+key);
return encodeStr;
}
public static boolean verify(String text, String key, String md5) {
String md5Text = md5(text, key);
if(md5Text.equalsIgnoreCase(md5)) {
return true;
}
return false;
}
public static void main(String[] args) {
String text = "wu";
String key = "jun";
System.out.println(md5(text, key));
System.out.println(verify(text, key, md5(text, key)));
}
}