在C#和SQL Server 2008 R2中使用MD5
本文关键字:MD5 R2 2008 SQL Server | 更新日期: 2023-09-27 18:26:27
我用MD5编程对密码进行哈希,但当我比较C#中创建的MD5哈希和SQL Server创建的MD5-哈希(HASHBYTES('MD5','admin'))时,结果不一样。
为什么它们不一样?如何解决这个问题?
此外,我应该如何在sql server 2008 R2中存储MD5。使用varbinary(max)
还是binary(16)
?
除了Reza M.一个答案,您应该使用HASHBYTES()获得良好的结果。但是,字节的顺序可能是个问题。在SQLServer2005+中,通过进行一些转换并使用内置的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))
我认为,如果哈希输出是从HASHBYTES()输出的,那么应该将其存储为varbinary(max)。否则,将其存储为原始值类型——如果它是二进制(16),则使用它。