Java 根据字符串计算 MD5 值
2022-10-20 18:03:55
# Java MD5 相关类:MessageDigest
`MessageDigest` 类主要为应用程序提供信息摘要算法的功能,如 `MD5` 或 `SHA` 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
使用流程:
1. 实例化 `MessageDigest` 类
2. 通过 `update()` 方法处理数据
3. 任何时候都可以调用 `reset()` 重置摘要
4. 一旦所有需要更新的数据都已经被更新了,可以调用 `digest()` 方法之一完成哈希计算。在调用 `digest()` 之后,`MessageDigest` 对象被重新设置成其初始状态。
示例代码:计算 `MD5` 值。
```
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.xml.bind.DatatypeConverter;
public class Md5Util {
public static String getMd5(String string) {
String md5 = "";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(string.getBytes());
byte[] digest = md.digest();
md5 = DatatypeConverter.printHexBinary(digest).toLowerCase();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
return md5;
}
}
```
使用示例:
```
public class App {
public static void main(String[] args) {
String password = "123456";
String passwordHash = Md5Util.getMd5(password);
System.out.println(passwordHash);
// e10adc3949ba59abbe56e057f20f883e
}
}
```
与 `Python` 计算出来的 `MD5` 值进行对比:
```
>>> import hashlib
>>> password = '123456'
>>> encoded = password.encode()
>>> md5 = hashlib.md5(encoded).hexdigest()
>>> md5
'e10adc3949ba59abbe56e057f20f883e'
```
参考资料:
- Java SDK