除非您更改默认编码,否则 SQL Server 通常使用 Windows-1252VARCHAR()
.
private static readonly Encoding Encoding1252 = Encoding.GetEncoding(1252);
/// <summary>
/// Compute hash for string encoded as Windows-1252
/// </summary>
/// <param name="s">String to be hashed</param>
/// <returns>40-character hex string</returns>
public static string SHA1HashStringForDefaultString(string s)
{
byte[] bytes = Encoding1252.GetBytes(s);
发现问题了:
你正在散列两个不同的字符串
HASHBYTES('sha1', "Glenw00d@3")
and
SHA1Util.SHA1HashStringForUTF8String("Glenw00d@@3")
See the @
/@@
?
现在,对于编码,我会说它是 Windows-1252。但你可以检查
Select TABLE_NAME, COLUMN_NAME, Columns.COLLATION_NAME From INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Yourtable'
如果您的列的排序规则包含CP1那么它是Windows-1252 https://msdn.microsoft.com/en-us/library/ms180175.aspx.
对于输出...如果您想要一个字符串,请将返回替换为:
return Encoding1252.GetString(hashBytes);
For Glenw00d@@3
哈希值是:0LdtRz6UVBfrzxjlyJPHT/MyNqU=
如果你想要一个十六进制字符串,请保留返回值,
For Glenw00d@@3
哈希值是:d0b76d473e945417ebcf18e5c893c74ff33236a5
如果你想要它的base64:
return Convert.ToBase64String(hashBytes);
For Glenw00d@@3
哈希值是:0LdtRz6UVBfrzxjlyJPHT/MyNqU=