SQL Uniqueidentifier hashbytes 不匹配
SQL Uniqueidentifier hashbytes does not match
我有 C#
建立连接 SQL Server 2014
数据库的应用程序。当我在 C#
上创建 Guid
时,它通过 lower case
在 SQL 上写入。但是当我查询 SQL
时,我得到这个值 upper case
。此 Guid
值需要通过 SHA1
和 SQL
returns 不同的 hashed value
进行哈希处理。
是因为collation
吗?
我用Turkish_CI_AI
.
GUID 是 16 字节的二进制值,因此它们没有大小写。常见的由多部分组成的十六进制字符串只是 GUID 的一种文本表示形式。这意味着它是大写还是小写取决于格式化代码,与实际值无关。这也意味着在比较 GUID 的任何文本表示时不应考虑大小写。
如果您想对 Uniqueidentifier
值进行哈希处理,您应该将其作为 GUID 检索并通过调用 Guid.ToByteArray 而非其文本表示来对实际字节进行哈希处理。
最后,您应该考虑是否真的需要对 GUID 进行哈希处理。 GUID 的长度为 128 位,而 SHA1 的长度至少为 160 位。如果要计算哈希值以进行快速比较,最好只使用原始 GUID。
如果要对一个多字段的消息进行hash,最好是获取所有字段的字节,然后对得到的字节数组进行hash
我有 C#
建立连接 SQL Server 2014
数据库的应用程序。当我在 C#
上创建 Guid
时,它通过 lower case
在 SQL 上写入。但是当我查询 SQL
时,我得到这个值 upper case
。此 Guid
值需要通过 SHA1
和 SQL
returns 不同的 hashed value
进行哈希处理。
是因为collation
吗?
我用Turkish_CI_AI
.
GUID 是 16 字节的二进制值,因此它们没有大小写。常见的由多部分组成的十六进制字符串只是 GUID 的一种文本表示形式。这意味着它是大写还是小写取决于格式化代码,与实际值无关。这也意味着在比较 GUID 的任何文本表示时不应考虑大小写。
如果您想对 Uniqueidentifier
值进行哈希处理,您应该将其作为 GUID 检索并通过调用 Guid.ToByteArray 而非其文本表示来对实际字节进行哈希处理。
最后,您应该考虑是否真的需要对 GUID 进行哈希处理。 GUID 的长度为 128 位,而 SHA1 的长度至少为 160 位。如果要计算哈希值以进行快速比较,最好只使用原始 GUID。
如果要对一个多字段的消息进行hash,最好是获取所有字段的字节,然后对得到的字节数组进行hash