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