如何获得SQL Server md5哈希以匹配以前的php md5哈希?

时间:2016-03-10 02:19:14

标签: php sql-server hash md5

我有一个SQL Server 2014表,其中填充了php使用php $hash = md5($password);命令生成的MD5哈希值。现在我们正在转向更严格的安全模型,我希望能够在存储过程中获取密码并将其与先前存储的md5哈希相匹配。

当SQL返回的md5哈希值与php返回的哈希值不同时出现问题。

当我使用

SELECT username, 
    [password],  
    master.sys.fn_varbintohexsubstring(0, HASHBYTES('MD5', CONVERT(VARCHAR(32), [password])), 1, 0) AS Test, 
    HASHBYTES('MD5', [password]) AS MD5 
FROM myTable 
WHERE username=@username

我明白了:

Password = 28d744960521b00fd7c4a9e7e7d4d3a3, 
Test = 172b078903f8f16098fea3df31ee8989, and 
MD5 = 0x172B078903F8F16098FEA3DF31EE8989

MD5表达式是正常的tsql,我在线测试表达式,但正如你所看到的,它们的结果都不等于我最初从php的md5()表达式中存储的结果。

任何想法为什么这些都不同,更好的是,有没有办法我可以格式化tsql命令给我一个匹配存储的php md5值?

1 个答案:

答案 0 :(得分:0)

道歉!我将值[密码]发送到sql哈希序列而不是输入的变量@password!所以我在Test和MD5中收到了哈希的哈希值,而不是原始密码的哈希值。

有趣的是,需要花哨的master.sys.fn_varbintohexsubstring(0, HASHBYTES('MD5', CONVERT(VARCHAR(32), [password])), 1, 0)来移除前导0x以获得正确的匹配。