SHA256不';当使用西班牙语单词时,C#和SQL Server之间不会产生相同的结果

SHA256不';当使用西班牙语单词时,C#和SQL Server之间不会产生相同的结果,c#,sql-server,sha256,hashbytes,C#,Sql Server,Sha256,Hashbytes,我正在使用SHA256获取哈希十六进制字符串。当使用正则字符时效果很好,但是当要散列的字符串包含重音/变音符号时,我在C#和T-SQL中得到了不同的结果。我更愿意在SQL Server端进行更改 匹配的示例词:bird 不匹配的示例词:MUñOZ C# .NET、Windows和SQL Server使用UTF16,而不是UTF8。这两个代码段正在散列不同的字节。使用相同的编码时,哈希字符串是相同的 这: using (var sha2 = System.Security.Cryptograp

我正在使用SHA256获取哈希十六进制字符串。当使用正则字符时效果很好,但是当要散列的字符串包含重音/变音符号时,我在C#和T-SQL中得到了不同的结果。我更愿意在SQL Server端进行更改

  • 匹配的示例词:bird
  • 不匹配的示例词:MUñOZ
C#


.NET、Windows和SQL Server使用UTF16,而不是UTF8。这两个代码段正在散列不同的字节。使用相同的编码时,哈希字符串是相同的

这:

using (var sha2 = System.Security.Cryptography.SHA256.Create())  
{
    var hash = sha2.ComputeHash(Encoding.Unicode.GetBytes("MUÑOZ"));
    {
        string hexString = string.Empty;

        for (int i = 0; i < hash.Length; i++)
        {
            hexString += hash[i].ToString("X2");
        }
        Console.WriteLine(hexString);        
    }    
}

这与SQL Server的哈希字符串相同。NET、Windows和SQL Server使用UTF16,而不是UTF8。这两个代码段正在散列不同的字节。使用相同的编码时,哈希字符串是相同的

这:

using (var sha2 = System.Security.Cryptography.SHA256.Create())  
{
    var hash = sha2.ComputeHash(Encoding.Unicode.GetBytes("MUÑOZ"));
    {
        string hexString = string.Empty;

        for (int i = 0; i < hash.Length; i++)
        {
            hexString += hash[i].ToString("X2");
        }
        Console.WriteLine(hexString);        
    }    
}

这与SQL Server的哈希字符串相同,请使用。像这样看<代码>选择HASHBYTES('SHA2_256',N'MUñOZ')将产生453803。。。。vs A8118F6…我怀疑问题在于在C#端使用UTF8。我相信SQL server使用UC2作为其默认编码,因此您需要在散列之前将您的C#字符串转换为该字符串。SQL代码正在生成正确的散列,但用于不同的数据。如果希望两者产生相同的结果,则需要散列相同的数据。就这么简单。@DeVonte.NET、Windows和SQL Server使用UTF16,而不是UTF8。你在散列不同的字节。如果希望两个代码段产生相同的值,请使用
Encoding.Unicode
use。像这样看<代码>选择HASHBYTES('SHA2_256',N'MUñOZ')将产生453803。。。。vs A8118F6…我怀疑问题在于在C#端使用UTF8。我相信SQL server使用UC2作为其默认编码,因此您需要在散列之前将您的C#字符串转换为该字符串。SQL代码正在生成正确的散列,但用于不同的数据。如果希望两者产生相同的结果,则需要散列相同的数据。就这么简单。@DeVonte.NET、Windows和SQL Server使用UTF16,而不是UTF8。你在散列不同的字节。如果希望两个代码段产生相同的值,请使用
Encoding.Unicode
using (var sha2 = System.Security.Cryptography.SHA256.Create())  
{
    var hash = sha2.ComputeHash(Encoding.Unicode.GetBytes("MUÑOZ"));
    {
        string hexString = string.Empty;

        for (int i = 0; i < hash.Length; i++)
        {
            hexString += hash[i].ToString("X2");
        }
        Console.WriteLine(hexString);        
    }    
}
276DB000BF524070F106A2C413942159AB5EF2F5CA5A5B91AB2F3B6FA48EE1ED