Computer Wiz99 Ответов: 1

Почему PWDCOMPARE возвращает 0, когда он должен возвращать 1?


declare @original nvarchar(128)  = '1'
declare @afterhash varbinary(128) = HASHBYTES('SHA2_512', '1')

select PWDCOMPARE(@original, @afterhash)
select @afterhash


Что я уже пробовал:

Я попытался изменить 1 на 0 и изменить 1 на @original.

1 Ответов

Рейтинг:
4

Dave Kreskowiak

Он возвращает 0, потому что PWDCOMPARE хэширует открытый текстовый пароль, который вы передаете, с помощью алгоритма, который не является SHA2_512.

Вы можете увидеть это сами, сделав это:

DECLARE @Original nvarchar(128) = '1';

DECLARE @Hashed varbinary(128) = HASHBYTES('SHA2_512', '1');

SELECT PWDENCRYPT(@Original) AS 'PWDENCRYPT Hash';
SELECT @Hashed AS 'SHA2_512 Hash';

SELECT PWDCOMPARE(@Original, @Hashed);


Вы должны использовать PWDCOMPARE только с тем столбцом, который был зашифрован с помощью PWDENCRYPT.

Вы больше не должны быть PWDENCRYPT. Вместо этого используйте ХЭШБАЙТЫ и сравните их со значением столбца самостоятельно.