【问题标题】:SQL Uniqueidentifier hashbytes does not matchSQL Uniqueidentifier hashbytes 不匹配
【发布时间】:2015-08-10 06:58:00
【问题描述】:

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

是因为collation吗?

我使用Turkish_CI_AI

【问题讨论】:

  • 你在哪里做散列?在数据库中还是在应用程序中?
  • 你想做什么? SHA1 哈希大于 GUID。此外,GUID 是一个 16 字节的二进制值,你应该散列它的字节,而不是文本表示
  • 回答已解决的问题,谢谢。

标签: c# sql collation uniqueidentifier hashbytes


【解决方案1】:

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

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

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

如果要对多字段消息进行哈希处理,最好获取所有字段的字节并对生成的字节数组进行哈希处理

【讨论】:

    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多