Вывод функции хешбайта

У меня странная ситуация с использованием функции 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 байт, что, как правило, не то, что вы хотите.

Другие вопросы по тегам