SQL Uniqueidentifier hashbytes 不匹配

SQL Uniqueidentifier hashbytes does not match

我有 C# 建立连接 SQL Server 2014 数据库的应用程序。当我在 C# 上创建 Guid 时,它通过 lower case 在 SQL 上写入。但是当我查询 SQL 时,我得到这个值 upper case。此 Guid 值需要通过 SHA1SQL returns 不同的 hashed value 进行哈希处理。

是因为collation吗?

我用Turkish_CI_AI.

GUID 是 16 字节的二进制值,因此它们没有大小写。常见的由多部分组成的十六进制字符串只是 GUID 的一种文本表示形式。这意味着它是大写还是小写取决于格式化代码,与实际值无关。这也意味着在比较 GUID 的任何文本表示时不应考虑大小写。

如果您想对 Uniqueidentifier 值进行哈希处理,您应该将其作为 GUID 检索并通过调用 Guid.ToByteArray 而非其文本表示来对实际字节进行哈希处理。

最后,您应该考虑是否真的需要对 GUID 进行哈希处理。 GUID 的长度为 128 位,而 SHA1 的长度至少为 160 位。如果要计算哈希值以进行快速比较,最好只使用原始 GUID。

如果要对一个多字段的消息进行hash,最好是获取所有字段的字节,然后对得到的字节数组进行hash