Я недавно вступил в должность администратора приложения для приложения, разработанного собственными силами, приложения, которое не было документации и поддержки.
Я обнаружил, что мой предшественник давал один и тот же первоначальный пароль каждому новому пользователю.пользователя, и нет политики паролей, требующей от пользователей изменить свой пароль по сравнению с определенным исходным паролем.Я знаю, каков первоначальный пароль, и я хотел бы разработать отчет SQL, чтобы выяснить, кто имеет этот пароль, чтобы я мог принудительно изменить пароль.
Я не могу написать SQLКод, имитирующий поведение приложений SHA1-хэширования пароля и соли, и хотел бы получить некоторую помощь.
Я создал приведенный ниже пример того, что я пробовал до сих пор, так что любой может скопировать/ вставить и игрушку с.
Тестовый пароль: Пароль1234!
Соль (хранится в БД SQL): PvEdk1itxYINUl1m6tMSBQ ==
Пароль(хранится в БД SQL): 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 будут такими же, как пароль, хранящийся в базе данных, показанной выше, но они не совпадают.
Это использует SQL Server 2017, и у меня есть относительная уверенность, что используемый алгоритм хэширования - SHA1.
Есть ли у кого-нибудь рекомендации относительно того, что я могу сделать или попытаться решитьмоя проблема?