【发布时间】:2012-12-18 06:30:51
【问题描述】:
在我的数据库中,我有一个计算列,其中包含一个名为 URLString 的列的 SHA1 哈希,该列包含 URL(例如“http://xxxx.com/index.html”)。
我经常需要查询表以根据 URLString 列找到特定的 URL。 该表包含 100K,这些查询需要几秒钟(使用 SQL Azure)。 由于 URL 可能很长,我无法在此列上创建索引(超过 450 个字节)。
为了加快速度,我想从 C# 计算 SQL Server hashbytes('SHA1',[URLString]) 的等效值,并根据该值进行查询。
我尝试了下面的代码,但我得到的值与数据库计算的值不同。
var urlString = Encoding.ASCII.GetBytes(url.URLString); //UTF8 also fails
var sha1 = new SHA1CryptoServiceProvider();
byte[] hash = sha1.ComputeHash(urlString);
我在这里错过了一些琐碎的事情吗?
我对可以解决相同问题的其他想法持开放态度(只要 SQL Azure 支持它们)。
示例:在数据库中自动计算出的 URLhttp://www.whatismyip.org/ 的 SHA1 值为 0xAE66CA69A157186A511ED462153D7CA65F0C1BF7。
【问题讨论】:
-
你能发布计算哈希的插入吗?
-
如果您的输出与服务器端计算不匹配,请尝试使用众多在线哈希计算器之一来验证哪个结果是正确的。如果一个不正确,可能是由于使用了盐
-
这是一个自动计算的列,当我插入一个新的 URL 时,该值由数据库计算并插入。
-
如果有盐值,所有 SQL Server 的值是否相同?它可以从某个地方获得吗?
-
一定有一段 SQL 脚本在某处计算它。除非你发现无法猜测发生了什么
标签: c# sql-server tsql sha