【发布时间】:2015-02-22 20:11:14
【问题描述】:
我尝试在 java 中生成 md5 字符串。我写了一些代码,我可以生成 md5 字符串,但我有问题 我第一次给你看我的代码
public class MD5Hash
{
public static void main(String args[])
{
computeMD5Hash("dbox#service" + "2014-12-24T18:34:49");
}
public static void computeMD5Hash(String password)
{
try
{
// Create MD5 Hash
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(password.getBytes("UTF-16"));
digest.update(password.getBytes());
byte messageDigest[] = digest.digest();
StringBuffer MD5Hash = new StringBuffer();
for (int i = 0; i < messageDigest.length; i++)
{
String h = Integer.toHexString(0xFF & messageDigest[i]);
while (h.length() < 2)
h = "0" + h;
MD5Hash.append(h);
}
// result.setText("MD5 hash generated is: " + " " + MD5Hash);
System.out.println("MD5 hash generated is: " + " " + MD5Hash);
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
}
}
正如我所说,我可以接收 md5 字符串,但我的朋友是 .net 开发人员,他也编写了代码,而我的 md5 字符串不同。这是他的 C# 代码
public static string CreateMD5(string plain)
{
MD5 md5 = MD5.Create();
byte[] inputBytes = Encoding.Unicode.GetBytes(plain);
byte[] hashBytes = md5.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("x2"));
}
return sb.ToString();
}
somethink 在我的 Java 代码中是错误的,因为我希望我的 Md5 字符串发送到服务器,当我将我的 md5 字符串发送到服务器时出现错误 - 我的朋友没有... 如果有人知道解决方案,我的代码有什么问题请帮助我 谢谢
【问题讨论】:
-
您的 Java 代码没有经过优化 (
StringBuffer?),但可以正常工作。为什么你认为不是?我针对已发布的哈希 here 对其进行了测试。 -
您的代码是正确的,但不是很“Java 风格”。我已经为您的代码创建了 Java-style variant - 如果您有兴趣。如果您不是,请忽略它。
-
@Christian Hujer 谢谢。我插入了你的代码,但我在 toHexString 方法中有语法错误
-
@ElliottFrisch 因为正如我所说,我需要这个 md5 字符串来发送服务器。在 java 代码中,当我尝试发送时出现错误,而 C# 没有任何错误
-
'echo -n "dbox#service2014-12-24T18:34:49" | md5sum' 给出 70f00e5bd872bd73ec6a8b4b8c8c9fef