在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)

在C#和SQL Server 2008 R2中使用MD5

除了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),则使用它。