首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎样才能得到一个SQL Server的md5散列来匹配之前的php md5散列?

我怎样才能得到一个SQL Server的md5散列来匹配之前的php md5散列?
EN

Stack Overflow用户
提问于 2016-03-10 10:19:14
回答 1查看 1.7K关注 0票数 0

我有一个SQL Server2014表格,里面填满了由php使用php $hash = md5($password);命令生成的MD5散列。现在,我们将转向更严格的安全模型,我希望能够在存储过程中获取一个密码,并将其与先前存储的md5散列进行匹配。

当SQL返回的md5散列与php返回的散列不同时,问题就出现了。

当我使用

代码语言:javascript
复制
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

我得到了:

代码语言:javascript
复制
Password = 28d744960521b00fd7c4a9e7e7d4d3a3, 
Test = 172b078903f8f16098fea3df31ee8989, and 
MD5 = 0x172B078903F8F16098FEA3DF31EE8989

MD5表达式是普通的tsql和我在网上得到的Test表达式,但正如您所看到的,它们的结果都不等于我最初从php的md5()表达式中存储的结果。

你知道为什么它们是不同的吗,更好的是,有没有一种方法可以格式化tsql命令,让我匹配存储的php md5值?

EN

回答 1

Stack Overflow用户

发布于 2016-03-10 10:31:36

我很抱歉!我向sql散列序列发送的是值password,而不是输入的变量@password!因此,我在测试和MD5中接收到的是散列的散列,而不是原始密码的散列。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35906413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档