SQL中的逆向工程加盐SHA1密码逻辑

时间:2019-04-19 01:11:50

标签: sql sql-server cryptography passwords password-encryption

我最近接任了内部开发的应用程序的应用程序管理员,该应用程序没有文档也没有支持。

我发现我的前任给每个新用户提供了完全相同的初始密码,并且没有适当的密码政策要求用户更改已定义的初始密码。我知道初始密码是什么,我想开发一个SQL报告以找出谁拥有该密码,以便我可以强制更改密码。

我无法编写SQL代码来模仿应用程序的密码和盐值SHA1哈希的行为,并且需要一些帮助。

我已经建立了以下示例,以说明到目前为止我已经尝试过的方法,以便任何人都可以复制/粘贴和玩具。

测试密码: Password1234!
盐(存储在SQL DB中): PvEdk1itxYINUl1m6tMSBQ ==
密码(存储在SQL DB中): K9VK3nis2lKMjGvgkuTogK / 3Nac =

在下面,您将找到我用来做概念证明的SQL。

    DECLARE @Password varchar(100) = 'Password1234!'
    DECLARE @PasswordHex varbinary(max) = CONVERT(varbinary(max), @Password)
    DECLARE @Salt varchar(100) = 'PvEdk1itxYINUl1m6tMSBQ=='
    DECLARE @SaltHex varbinary(max)
    DECLARE @PasswordSaltHex varbinary(max)
    DECLARE @HashedPassHex varbinary(max)
    DECLARE @HashedPass varchar(max)
    --
    SET @SaltHex = cast('' as xml).value('xs:base64Binary(sql:variable("@Salt"))', 'varbinary(max)')
    SET @PasswordSaltHex = @PasswordHex + @SaltHex
    SET @HashedPassHex = HASHBYTES('SHA1',@PasswordSaltHex)
    SET @HashedPass = cast('' as xml).value('xs:base64Binary(sql:variable("@HashedPassHex"))', 'varchar(max)')
    --
    PRINT @Password -- OUTPUT: Password1234!
    PRINT @PasswordHex -- OUTPUT: 0x50617373776F72643132333421
    PRINT @Salt -- OUTPUT: PvEdk1itxYINUl1m6tMSBQ==
    PRINT @SaltHex -- OUTPUT: 0x3EF11D9358ADC5820D525D66EAD31205
    PRINT @PasswordSaltHex -- OUTPUT: 0x50617373776F726431323334213EF11D9358ADC5820D525D66EAD31205
    PRINT @HashedPassHex -- OUTPUT: 0x727B312D682FA8766E6A498B0AF923FFDAF3778F
    PRINT @HashedPass -- OUTPUT: cnsxLWgvqHZuakmLCvkj/9rzd48=

我希望 @HashedPass 的输出与上面显示的数据库中存储的密码相同,但是它们不匹配。
< br />

这使用的是SQL Server 2017,我相对确定使用的哈希算法是SHA1。

有人对我可以做什么或尝试解决我的问题有建议吗?

0 个答案:

没有答案