De *_*nte 4 c# sql-server sha256 hashbytes
我正在使用 SHA256 来获取散列的十六进制字符串。使用常规字符时它工作得很好,但是当要散列的字符串包含重音符号/变音符号时,我在 C# 和 T-SQL 中会得到不同的结果。我更愿意在 SQL Server 端进行更改。
\n\nC#
\n\nusing (SHA256 sha2 = SHA256.Create()) \n{\n var hash = sha2.ComputeHash(Encoding.UTF8.GetBytes(fullAddress));\n string hexString = string.Empty;\n\n for (int i = 0; i < hash.Length; i++)\n {\n hexString += hash[i].ToString("X2"); //Convert the byte to Hexadecimal representation, Notice that we use "X2" instead of "X"\n }\n\n sha2.Dispose();\n return hexString;\n}\nRun Code Online (Sandbox Code Playgroud)\n\nSQL
\n\ndeclare @fullAddress nvarchar(500)\nset @fullAddress = \'MU\xc3\x91OZ\'\nselect CONVERT([varchar](256), HASHBYTES(\'SHA2_256\', @fullAddress), 2) \nRun Code Online (Sandbox Code Playgroud)\n
.NET、Windows 和 SQL Server 使用 UTF16,而不是 UTF8。这两个片段对不同的字节进行哈希处理。当使用相同的编码时,哈希字符串是相同的。
\n\n这 :
\n\nusing (var sha2 = System.Security.Cryptography.SHA256.Create()) \n{\n var hash = sha2.ComputeHash(Encoding.Unicode.GetBytes("MU\xc3\x91OZ"));\n {\n string hexString = string.Empty;\n\n for (int i = 0; i < hash.Length; i++)\n {\n hexString += hash[i].ToString("X2");\n }\n Console.WriteLine(hexString); \n } \n}\nRun Code Online (Sandbox Code Playgroud)\n\n生产:
\n\n276DB000BF524070F106A2C413942159AB5EF2F5CA5A5B91AB2F3B6FA48EE1ED\nRun Code Online (Sandbox Code Playgroud)\n\n与 SQL Server 的哈希字符串相同
\n| 归档时间: |
|
| 查看次数: |
3466 次 |
| 最近记录: |