【发布时间】:2010-10-21 14:59:16
【问题描述】:
我认为我要问的问题是不可能的,但是,我认为这里值得一试。
我们有一个使用 SQL Server 的 PWDEncrypt 和 PWDCompare 函数的应用程序。
系统的一部分会创建用户的副本(相同的登录名和密码)。由于系统中的一个错误,它没有复制密码的二进制存储 PWDEncrypt,而是执行另一个密码的 PWDEncrypt。因此二进制值不匹配。
是否有可能找出这两个二进制值是否是相同密码的哈希?
例如PWDEncrypt('abc') = PWDEncrypt('abc')
如果我能做到这一点,那么这意味着我可以找出这个错误实际影响了多少用户,而不必处理成千上万的用户!
编辑:澄清一下,PWDEncrypt('abc') = PWDEncrypt('abc') 不会返回 true,因为密码被散列为不同的值。
虽然我知道不可能从哈希中获取密码,但 PWDCOMPARE('abc', PWDENCRYPT('abc')) 可以工作,因此,在内部 SQL Server 必须做的不仅仅是散列您正在比较的密码和检查值是否相同。
【问题讨论】:
-
我认为 PWDCOMPARE('abc', PWDENCRYPT('abc')) 在内部工作的方式是 PWDCOMPARE 将使用 PWDENCRYPT('abc' ) 这样,PWDCOMPARE 就不必解密密码并且不知道密码是什么。
标签: sql-server sql-server-2005 encryption hash passwords