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