Вывод функции хешбайта
У меня странная ситуация с использованием функции Hashbytes в MSSQL 2008 R2.
Выберите пароль,Hashbytes('SHA1', 'sa') возвращает 0x3608A6D1A05ABA23EA390E5F3B48203DBB7241F7.
Позже я вручную обновляю поле таблицы до этого значения, но Where Password = Hashbytes('SHA1', 'sa') не дает мне никакого результата. Я уже использовал типы данных varbinary, binary, varchar, nvarchar и char. Пожалуйста, предложите, в чем может быть проблема и как я могу решить проблему. Благодарю.
1 ответ
Согласно документации, для SHA-1 у вас есть выходной размер "160 бит (20 байтов) для SHA и SHA1".
Поэтому это:
declare @password varbinary(19);
set @password = HASHBYTES('SHA1','sa');
if @password= HASHBYTES('SHA1','sa')
print 'yes';
else
print 'no'
возвращается no
, поскольку недостаточно места для правильного хранения результата; но это
declare @password varbinary(20);
set @password = HASHBYTES('SHA1','sa');
if @password= HASHBYTES('SHA1','sa')
print 'yes';
else
print 'no'
возвращается yes
, Если твой Password
поле binary
или же varbinary
и есть место для 20 байтов, вы должны быть в порядке.
Кстати, если вы просто укажите binary
или же varbinary
без длины вы получите 1 байт, что, как правило, не то, что вы хотите.