MessageDigest
类可以为您提供 MD5 摘要的实例。
使用字符串和 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()
以获取结果哈希。
您需要java.security.MessageDigest
。
调用MessageDigest.getInstance("MD5")
以获取可以使用的MessageDigest
的 MD5 实例。
通过执行以下操作之一来计算哈希:
byte[]
输入,并使用md.digest(bytes)
在一次操作中计算哈希值。 md.update(bytes)
一次向MessageDigest
一个byte[]
块。添加完输入字节后,请使用md.digest()
计算哈希值。 md.digest()
返回的byte[]
是 MD5 哈希值。
如果您实际上希望答案以字符串而不是字节数组的形式返回,则始终可以执行以下操作:
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);
// Now we need to zero pad it if you actually want the full 32 chars.
while(hashtext.length() < 32 ){
hashtext = "0"+hashtext;
}
您可能还需要查看 apache commons 编解码器项目的DigestUtils类,该类提供了非常方便的方法来创建 MD5 或 SHA 摘要。
发现了这一点:
public String MD5(String md5) {
try {
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
byte[] array = md.digest(md5.getBytes());
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
}
return sb.toString();
} catch (java.security.NoSuchAlgorithmException e) {
}
return null;
}
在下面的网站上,我对此一无所知,但是它是可行的解决方案!对我来说,许多其他代码无法正常工作,我最终在哈希中缺少 0。这似乎与 PHP 相同。来源: http : //m2tec.be/blog/2010/02/03/java-md5-hex-0093
这是我的用法:
final MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(string.getBytes(Charset.forName("UTF8")));
final byte[] resultByte = messageDigest.digest();
final String result = new String(Hex.encodeHex(resultByte));
十六进制为: Apache Commons 项目中的 org.apache.commons.codec.binary.Hex
。
我刚刚下载了commons-codec.jar,并获得了像 md5 这样的完美 php。这是手册 。
只需将其导入您的项目并使用
String Url = "your_url";
System.out.println( DigestUtils.md5Hex( Url ) );
就在那里。
我发现这是最清晰,最简洁的方法:
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(StandardCharsets.UTF_8.encode(string));
return String.format("%032x", new BigInteger(1, md5.digest()));
找到了这个解决方案,该解决方案从 MD5 哈希中取回 String 表示形式要干净得多。
import java.security.*;
import java.math.*;
public class MD5 {
public static void main(String args[]) throws Exception{
String s="This is a test";
MessageDigest m=MessageDigest.getInstance("MD5");
m.update(s.getBytes(),0,s.length());
System.out.println("MD5: "+new BigInteger(1,m.digest()).toString(16));
}
}
代码是从这里提取的。
另一种选择是使用番石榴散列方法 :
Hasher hasher = Hashing.md5().newHasher();
hasher.putString("my string");
byte[] md5 = hasher.hash().asBytes();
如果您已经在使用番石榴,则非常方便(如果没有,则应该使用)。