如何生成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;
}