如何生成MD5哈希值? | Java Debug 笔记

919 阅读1分钟

如何生成MD5哈希值? | Java Debug 笔记

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:

是否有任何方法可以在Java中生成字符串的MD5哈希值?

回答1:

你需要java.security.MessageDigest

调用MessageDigest.getInstance("MD5")以获取MessageDigest您可以使用的MD5实例。

通过执行以下操作之一来计算哈希:

  • 将整个输入作为byte[]进行输入,并使用md.digest(bytes)来计算哈希值。
  • 通过调用一次块md.update(bytes)来填充MessageDigest的一个byte[]。添加完后,请使用 md.digest()计算哈希值。

md.digest()byte[]返回的即是MD5哈希值。

回答2:

MessageDigest类可为您提供的MD5摘要的一个实例。

使用字符串和crypto类*(译者注:crypto类的目的是为了提供通用的加密和哈希算法)*时,请确保始终指定要使用字节表示形式的编码。如果仅使用string.getBytes(),则将使用平台默认值。(并非所有平台都使用相同的默认值)

import java.security.*;

..

byte[] bytesOfMessage = yourString.getBytes("UTF-8");

MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(bytesOfMessage);

如果您有大量数据,请查看.update(byte[]),它是可以重复调用的方法。然后调用.digest()以获取结果哈希。

回答3:

如果您实际上希望答案以字符串而不是字节数组的形式返回,则始终可以执行以下操作

String plaintext = "your text here";
MessageDigest m = MessageDigest.getInstance("MD5");
m.reset();
m.update(plaintext.getBytes());
byte[] digest = m.digest();
BigInteger bigInt = new BigInteger(1,digest);
String hashtext = bigInt.toString(16);
// 现在,如果您确实需要完整的32个字符,则需要将其填充为零。
while(hashtext.length() < 32 ){
  hashtext = "0"+hashtext;
}

原文链接