使 JAVA MD5 哈希匹配 C# MD5 哈希
Make JAVA MD5 hash match C# MD5 hash
我的工作是用 C# 重写一堆 Java 代码。
这是 JAVA 代码:
public static String CreateMD5(String str) {
try {
byte[] digest = MessageDigest.getInstance("MD5").digest(str.getBytes("UTF-8"));
StringBuffer stringBuffer = new StringBuffer();
for (byte b : digest) {
// i can not understand here
stringBuffer.append(Integer.toHexString((b & 255) | 256).substring(1, 3));
}
return stringBuffer.toString();
} catch (UnsupportedEncodingException | NoSuchAlgorithmException unused) {
return null;
}
}
Ok.As 你可以看到这段代码试图使 MD5 hash.But 我无法理解的是我已经展示的部分。
我在 C# 中尝试了这段代码来重写这段 JAVA 代码:
public static string CreateMD5(string input)
{
// Use input string to calculate MD5 hash
using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
{
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
// Convert the byte array to hexadecimal string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
}
return sb.ToString();
}
}
两个代码都在生成 MD5 哈希字符串,但结果不同。
您显示的两个代码片段之间的编码不同 - 您的 Java 代码使用 UTF-8,但您的 C# 代码使用 ASCII。这将导致不同的 MD5 哈希计算。
更改您的 C# 代码:
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
至:
byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);
这应该™ 解决您的问题,前提是没有其他代码转换错误。
我的工作是用 C# 重写一堆 Java 代码。 这是 JAVA 代码:
public static String CreateMD5(String str) {
try {
byte[] digest = MessageDigest.getInstance("MD5").digest(str.getBytes("UTF-8"));
StringBuffer stringBuffer = new StringBuffer();
for (byte b : digest) {
// i can not understand here
stringBuffer.append(Integer.toHexString((b & 255) | 256).substring(1, 3));
}
return stringBuffer.toString();
} catch (UnsupportedEncodingException | NoSuchAlgorithmException unused) {
return null;
}
}
Ok.As 你可以看到这段代码试图使 MD5 hash.But 我无法理解的是我已经展示的部分。 我在 C# 中尝试了这段代码来重写这段 JAVA 代码:
public static string CreateMD5(string input)
{
// Use input string to calculate MD5 hash
using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
{
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
// Convert the byte array to hexadecimal string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
}
return sb.ToString();
}
}
两个代码都在生成 MD5 哈希字符串,但结果不同。
您显示的两个代码片段之间的编码不同 - 您的 Java 代码使用 UTF-8,但您的 C# 代码使用 ASCII。这将导致不同的 MD5 哈希计算。
更改您的 C# 代码:
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
至:
byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);
这应该™ 解决您的问题,前提是没有其他代码转换错误。