c# - Java MD5 哈希与 C# 哈希不匹配

标签 c# java hash md5

我正在使用 C# 将字符串转换为 MD5 哈希值。然后我使用 Java 将字符串转换为 MD5 哈希值。我注意到即使对于相同的输入字符串,结果也不相同。

这是我的 Java 代码:

public String encrypt(String message)
{
    String digest = null;
    try
    {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] hash = md.digest(message.getBytes("UTF-8"));
        StringBuilder sb = new StringBuilder(2*hash.length);

        for(byte b : hash)
        {
            sb.append(String.format("%02x", b&0xff));
        }

        digest = sb.toString();
    }
    catch (Exception e)
    {
        //Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
    }

    return digest;

}

}

这是我的 C# 代码:

public static string Encrypt(string input)
    {
        Byte[] inputBytes = Encoding.UTF8.GetBytes(input);

        Byte[] hashedBytes = new MD5CryptoServiceProvider().ComputeHash(inputBytes);

        return BitConverter.ToString(hashedBytes);
    }

我可以更轻松地访问 Java 代码。有什么方法可以修改 Java 代码,使生成的哈希值与 C# 哈希值相同吗?

提前谢谢您。

最佳答案

它们产生相同的结果,但输出字符串格式不同

Java: 264fcf838c8e4b9d17c510cd5b8b9b78
C#: 26-4F-CF-83-8C-8E-4B-9D-17-C5-10-CD-5B-8B-9B-78

Java 方面最简单的就是稍微修改循环以添加破折号和大写十六进制 BitConverter.ToString()添加;

boolean add_dash = false;
for(byte b : hash)
{
    if(add_dash)
        sb.append("-");
    add_dash = true;
    sb.append(String.format("%02X", b&0xff));
}

这将使两者产生以下格式的 MD5 和

26-4F-CF-83-8C-8E-4B-9D-17-C5-10-CD-5B-8B-9B-78

在 C# 端执行相反的操作更简单,只需将 return 更改为;

return BitConverter.ToString (hashedBytes).Replace("-", "").ToLowerInvariant();

关于c# - Java MD5 哈希与 C# 哈希不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18296375/

相关文章:

c# - 使用 DirectShow.NET 的音频同步问题

c# - 如何减慢动画gif

java - 我是初学者,正在尝试在 netbeans 中制作纸牌翻转游戏

java - 如何使用 selenium webdriver 切换到重定向 url

perl - 跨 Perl 脚本共享哈希

ruby-on-rails - 等效于哈希的 .try() 以避免 "undefined method"错误?

c# - 深入查找或搜索 JSON 中任何级别的键并替换其在 C# 中的值

c# - C# 中的可空 DateTime

java - Spring Security - 密码哈希

java - Jenkins 无法从 Oracle 下载 JDK