在实际项目中有些时候会出现需要计算指定字符串MD5值的情况,通常情况下采取这样的做法
import java.security.MessageDigest;
...................
String originalMessage = xxxxxxx;
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(originalMessage.getBytes(Charset.forName("UTF8")));
byte[] resultByte = messageDigest.digest();
但是用这种方法得到的MD5值是byte数组形式,在进行MD5值比较时,更多的是使用MD5值字符串形式比较,我们可以自己写方法把它转换为Hex形式的字符串,也可以使用commons-codec库的Hex类
import org.apache.commons.codec.binary.Hex;
String md5Str = new String(Hex.encodeHex(resultByte));
这样就把生成的MD5值转换成了MD5字符串。
commons-codec库还提供了一个DigestUtils类,直接计算字符串的MD5值字符串,使用这个类,我们可以用以下方法计算字符串的MD5值字符串
import org.apache.commons.codec.digest.DigestUtils;
String originalMessage = xxxxxxx;
String md5Str = DigestUtils.md5Hex(originalMessage.getBytes(Charset.forName("UTF-8"));
Spring-Core库里也同样提供了一个DigestUtils类,可以用于计算MD5值字符串,方法如下
import org.springframework.util.DigestUtils;
String originalMessage = xxxxxxx;
String md5Str = DigestUtils.md5DigestAsHex(originalMessage.getBytes(Charset.forName("UTF-8")));
这两个类还可以计算InputStream的MD5值,只需要将方法参数的byte数组换为InputStream对象即可。