【问题标题】:Using MD5 in C# and SQL Server 2008 R2在 C# 和 SQL Server 2008 R2 中使用 MD5
【发布时间】:2013-08-04 14:02:36
【问题描述】:
我使用 MD5 以编程方式对密码进行哈希处理,但是当我比较在 C# 中创建的 MD5 哈希和由 SQL Server ( HASHBYTES('MD5', 'admin') ) 创建的 MD5 哈希时,结果不一样。
他们怎么不一样?如何解决这个问题?
另外我应该如何将 MD5 存储在 sql server 2008 R2 中。使用varbinary(max) 或binary(16)?
【问题讨论】:
标签:
c#
sql-server
hash
sql-server-2008-r2
md5
【解决方案1】:
除了 Reza M.A 答案之外,您应该使用 HASHBYTES() 获得良好的结果。但是,字节顺序可能是问题所在。在 SQL Server 2005+ 中,通过进行一些转换并使用内置的 REVERSE(),可以很容易地反转字节顺序。
DECLARE
@test varchar(MAX),
@vbTest varbinary(MAX)
SET @test = 'admin'
SET @vbTest = CONVERT(varbinary(max), @test, 0)
SELECT
HASHBYTES('MD5', @vbTest),
CAST(
REVERSE(
CAST(
HASHBYTES('MD5', @vbTest)
AS varchar(max))
)
AS varbinary(max))
我相信你应该将哈希输出存储为 varbinary(max),如果它是从 HASHBYTES() 输出的。否则,将其存储为您的原始值类型 - 如果它是二进制 (16),则使用它。