我有一个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值?
答案 0 :(得分:0)
道歉!我将值[密码]发送到sql哈希序列而不是输入的变量@password!所以我在Test和MD5中收到了哈希的哈希值,而不是原始密码的哈希值。
有趣的是,需要花哨的master.sys.fn_varbintohexsubstring(0, HASHBYTES('MD5', CONVERT(VARCHAR(32), [password])), 1, 0)
来移除前导0x
以获得正确的匹配。