C# MD5哈希特殊字符

C# MD5哈希特殊字符,c#,md5,C#,Md5,我曾尝试使用MD5在PHP中对字符串进行散列,在C#中也是如此,但如果字符串包含特殊字符,则结果会有所不同。有人能告诉我怎么匹配这个吗 这是我的C语言代码: MD5 MD5=new MD5CryptoServiceProvider(); //从文本字节计算哈希 计算哈希(ascienceoding.ASCII.GetBytes(text)); //计算后得到散列结果 字节[]结果=md5.Hash; StringBuilder strBuilder=新StringBuilder(); for(i

我曾尝试使用MD5在PHP中对字符串进行散列,在C#中也是如此,但如果字符串包含特殊字符,则结果会有所不同。有人能告诉我怎么匹配这个吗

这是我的C语言代码:

MD5 MD5=new MD5CryptoServiceProvider();
//从文本字节计算哈希
计算哈希(ascienceoding.ASCII.GetBytes(text));
//计算后得到散列结果
字节[]结果=md5.Hash;
StringBuilder strBuilder=新StringBuilder();
for(int i=0;i
我的字符串是作为字符串的
“Samuel2989&*”

产出:

PHP:957915b9c9a8fb65e13fe1dc9a8b86d4

C#:f5ee451f7eb4587da00d4aa31ae1c378


你能试试这个方法吗?告诉我它是否适合你

public static string MD5Hash(string input)
    {
        System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
        byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
        bs = x.ComputeHash(bs);
        System.Text.StringBuilder s = new System.Text.StringBuilder();
        foreach (byte b in bs)
        {
            s.Append(b.ToString("x2").ToLower());
        }
        string password = s.ToString();
        return password;
    }

如果看不到PHP代码,很难说为什么会有所不同;返回与您的C#code相同的值。PHP也会为我生成正确的MD5哈希。另外,您的整个StringBuilder循环代码可以替换为:
return string.Concat(result.Select(b=>b.ToString(“x2”)
MD5是一个关于二进制数据的函数,而不是字符串。字符串编码就是一切,因为它将字符串转换为经过哈希处理的二进制数据。上面的C#代码使用ASCII编码,对于所有这些字符,ASCII编码都有很好的定义,不依赖于代码页。PHP中使用的字符串编码算法是否与散列前将字符串转换为二进制数据的算法相同?OP的C#散列对该字符串是正确的,PHP为其生成相同的散列。我的回答与PHP端无关@ceejayoz@HGMamaci关键是,OP的问题在PHP方面,所以调整C#代码是没有意义的。@HGMamaci这是我的观点。OP的问题不在C方。OP的问题是,他们不知何故为PHP端的字符串生成了错误的MD5哈希。OK@ceejayoz。认可的。祝您有个美好的一天。
public static string MD5Hash(string input)
    {
        System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
        byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
        bs = x.ComputeHash(bs);
        System.Text.StringBuilder s = new System.Text.StringBuilder();
        foreach (byte b in bs)
        {
            s.Append(b.ToString("x2").ToLower());
        }
        string password = s.ToString();
        return password;
    }