Различные выходы, использующие хеш-байты
У меня есть простая таблица для тестирования HASH PASSWORDS
у меня есть 2 столбца PWD и HASHED_PWD. скажем, в PWD у меня есть пароль "111" в HASHED_PWD Я использовал этот запрос, чтобы добавить хешированный пароль "111":
declare @hashThis nvarchar(150);
select @hashThis = CONVERT(nvarchar(150),(SELECT PWD FROM Customers where CustomerID='cust-111'));
update Customers set HASHED_PWD=HASHBYTES('md5',@hashThis) where CustomerID='cust-111';
результат таков:
칮핏섛鐓鈦絣䮝ຆ
но когда я использую переменную для хеширования '111':
declare @hashThis nvarchar(150);
select @hashThis = CONVERT(nvarchar(150),(SELECT PWD FROM Customers where CustomerID='cust-111'));
--update Customers set HASHED_PWD=HASHBYTES('md5',@hashThis) where CustomerID='cust-111';
select HASHBYTES('md5',@hashThis) as HASHES;
тот же запрос, но результат другой. моя переменная @hashThis
является:
0x6ECE4FD51BC113942692637D9D4B860E
мой тип данных столбца и переменная совпадают nvarchar(150)
почему у меня разные результаты?
есть идеи?
Я использовал этот запрос для сравнения, и результат всегда не правильный
declare @pwd nvarchar(150);
declare @pwd2 nvarchar(150);
set @pwd=HASHBYTES('md5','111');
set @pwd2=(select HASHED_PWD from Customers where CustomerID='cust-111')
if @pwd=@pwd2
print 'Correct'
else
print 'not correct'
1 ответ
Я нашел проблему:
Я должен использовать VARBINARY
тип данных для PWD
а также HASHED_PWD
колонны.
и для моей переменной @hashThis
также
Это то, что я сделал. Я преобразовал тип данных для обоих столбцов:
alter table Customers alter column PWD VARBinary(150)
alter table Customers alter column HashED_PWD VARBinary(150)
Затем я использовал переменную, чтобы использовать тот же пароль для теста, как показано ниже:
DECLARE @hashThis nvarchar(50);
select @hashThis ='111';
select @hashThis= CONVERT (varbinary(150),@hashThis);
set @hashThis= HASHBYTES('md5',@hashThis);
if @hashThis=(select HASHED_PWD from Customers WHERE CustomerID='cust-111')
print 'Correct'
else
print 'not Correct'
и результат Correct
,