Я хочу получить хэш MD5 строкового значения в SQL Server 2005. Я делаю это с помощью следующей команды:
SELECT HashBytes('MD5', 'HelloWorld')
Однако это возвращает VarBinary вместо значения VarChar. Если я 0x68E109F0F40CA72A15E05CC22786F8E6
попытаюсь преобразовать в VarChar, я получу há ðô§*à\Â'†øæ
вместо 68E109F0F40CA72A15E05CC22786F8E6
.
Есть ли какое-нибудь решение на базе SQL?
sql
sql-server
GateKiller
источник
источник
источник
Используйте
master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)
вместо,master.dbo.fn_varbintohexstr
а затемsubstringing
результат.На самом деле
fn_varbintohexstr
звонкиfn_varbintohexsubstring
внутри. Первый аргументfn_varbintohexsubstring
указывает ему добавлять0xF
в качестве префикса или нет.fn_varbintohexstr
вызываетfn_varbintohexsubstring
с1
первым внутренним аргументом.Поскольку вам это не нужно
0xF
, звонитеfn_varbintohexsubstring
напрямую.источник
Вопреки тому, что говорит Дэвид Найт , эти две альтернативы возвращают одинаковый ответ в MS SQL 2008:
Похоже, что первый вариант лучше, начиная с версии 2008 года.
источник
(1 для преобразования шестнадцатеричного числа в строку)
преобразуйте это в меньшее и удалите 0x из начала строки с помощью подстроки:
точно так же, как то, что мы получаем в C # после преобразования байтов в строку
источник
Имея личный опыт использования следующего кода в хранимой процедуре, которая хеширует переменную SP, я могу подтвердить, хотя и недокументированная, эта комбинация работает на 100%, как в моем примере:
источник
Мне кажется, что лучше всего подойдет изменение типа данных на varbinary.
источник