【问题标题】:Compare password of webpages_membership in SQL Server query在 SQL Server 查询中比较 pages_membership 的密码
【发布时间】:2014-02-12 21:34:43
【问题描述】:

我有一个在 ASP.NET MVC 4 中完成的 Web 应用程序。它有用户,这些用户存储在 SQL Server 数据库中的表 webpages_UserProfilewebpages_Membership 等中。

我有另一个应用程序,我需要做的是查询表webpages_Membership,其中用户的密码是加密存储的,并将它们与纯文本密码进行比较。

所以我尝试做类似的事情

SELECT * 
FROM webpages_Membership 
 WHERE PwdCompare('mypasswordsend', Password) = 1

但它不起作用。我知道专栏是nvarchar(128)

如何比较?

【问题讨论】:

    标签: asp.net sql sql-server asp.net-mvc-4


    【解决方案1】:

    让我们看看PwdCompare 的第二个参数(强调我的):

    密码哈希
    是密码的加密哈希。 password_hash 是 *varbinary(128)*

    因此,如果您的列以纯文本形式存储密码,或者存储二进制散列的字符串表示形式,则它不起作用。您应该将列更改为正确,或者您需要先转换它,例如检查这个脚本:

    SELECT PWDENCRYPT(N'mypassword');
    

    产量:

    0x0200D422C0365A196E308777C96CBEF3854818601DDB516CADA98DBDF6A5F23922DC0FADD29B806121EA1A26AED86F57FCCB4DDF98F0EFBF44CA6BA864E9E58A818785FDDEDF

    如果我们尝试将该值作为字符串进行比较,我们会得到 0:

    SELECT PWDCOMPARE(N'mypassword', N'0x0200D422C0365A196E308777C96CBEF3854818601DDB516CADA98DBDF6A5F23922DC0FADD29B806121EA1A26AED86F57FCCB4DDF98F0EFBF44CA6BA864E9E58A818785FDDEDF');
    

    如果我们尝试将它作为 varbinary 值进行比较,我们会得到 1:

    SELECT PWDCOMPARE(N'mypassword', 0x0200D422C0365A196E308777C96CBEF3854818601DDB516CADA98DBDF6A5F23922DC0FADD29B806121EA1A26AED86F57FCCB4DDF98F0EFBF44CA6BA864E9E58A818785FDDEDF);
    

    如果您无法修复该表,那么您可以每次都在查询中执行这种昂贵的显式转换(注意结尾的 ,1 很重要):

    SELECT PWDCOMPARE(N'mypassword', 
      CONVERT(VARBINARY(128), N'0x0200D422C0365A196E308777C96CBEF3854818601DDB516CADA98DBDF6A5F23922DC0FADD29B806121EA1A26AED86F57FCCB4DDF98F0EFBF44CA6BA864E9E58A818785FDDEDF'
      , 1));
    

    【讨论】:

    • 我尝试获取哈希并执行 pwdcompare('mypassword','thesuperhashJFsdgidfdjdng') 之类的操作,但也没有用
    • @MaximilianoPoggio 那么'thesuperhashJFsdgidfdjdng' 到底是什么?这看起来根本不像一个哈希,只是一个莫名其妙的字符串。如果您以纯文本形式存储密码,请停止使用PWDCOMPARE 函数。如果您想正确存储哈希,请更改列数据类型并使用PWDENCRYPT 存储数据(或使用您自己的哈希/比较算法)。
    猜你喜欢
    • 2010-12-04
    • 2016-09-29
    • 2010-11-27
    • 2011-04-11
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多