Преобразование HashBytes в VarChar

Я хочу получить хэш MD5 строкового значения 9X_sql-statement в SQL Server 2005. Я делаю это с помощью 9X_ms-sql-server следующей команды:

SELECT HashBytes('MD5', 'HelloWorld') 

Однако это возвращает 9X_sql-statement значение VarBinary вместо значения VarChar. Если 9X_ms-sql-server я попытаюсь преобразовать 0x68E109F0F40CA72A15E05CC22786F8E6 в VarChar, я 9X_sqlselect получу há ðô§*à\Â'†øæ вместо 68E109F0F40CA72A15E05CC22786F8E6.

Есть ли решение на базе 9X_sql-srever SQL?

Yes

138
0
6
Общее количество ответов: 6

Ответ #1

Ответ на вопрос: Преобразование HashBytes в VarChar

Я нашел решение еще где:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32) 

9X_select-statement

160
3

  • fn_varbintohexstr - это недокументированная функция. Используйте CONVER ...

Ответ #2

Ответ на вопрос: Преобразование HashBytes в VarChar

SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2) 
9X_sql
106
4

  • Где я могу прочитать об этих стилях преоб ...

Ответ #3

Ответ на вопрос: Преобразование HashBytes в VarChar

Используйте master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0) вместо master.dbo.fn_varbintohexstr, а затем substringing результат.

На 9X_sql самом деле fn_varbintohexstr вызывает fn_varbintohexsubstring внутри себя. Первый 9X_sql-statement аргумент fn_varbintohexsubstring указывает ему добавлять 0xF в качестве 9X_sql-select префикса или нет. fn_varbintohexstr вызывает fn_varbintohexsubstring с 1 в качестве 9X_sql-srever первого внутреннего аргумента.

Поскольку 9X_mssql вам не нужен 0xF, вызывайте fn_varbintohexsubstring напрямую.

32
0

Ответ #4

Ответ на вопрос: Преобразование HashBytes в VarChar

Вопреки тому, что говорит David Knight, эти две альтернативы 9X_sql возвращают одинаковый ответ в MS SQL 2008:

SELECT CONVERT(VARCHAR(32),HashBytes('MD5', 'Hello World'),2) SELECT UPPER(master.dbo.fn_varbintohexsubstring(0, HashBytes('MD5', 'Hello World'), 1, 0)) 

Похоже, что 9X_sql первый вариант лучше, начиная с версии 2008.

29
0

Ответ #5

Ответ на вопрос: Преобразование HashBytes в VarChar

convert(varchar(34), HASHBYTES('MD5','Hello World'),1) 
(1 для преобразования шестнадцатеричного 9X_sql-server числа в строку)
преобразуйте это в меньшее 9X_sqlselect и удалите 0x из начала строки с помощью 9X_sql-srever подстроки:
substring(lower(convert(varchar(34), HASHBYTES('MD5','Hello World'),1)),3,32) 

точно так же, как то, что мы получаем 9X_sql-syntax в C# после преобразования байтов в строку
16
0

Ответ #6

Ответ на вопрос: Преобразование HashBytes в VarChar

Имея личный опыт использования следующего 9X_sql кода в хранимой процедуре, которая хеширует 9X_sqlselect переменную SP, я могу подтвердить, хотя 9X_mssql и недокументированная, эта комбинация работает 9X_sql на 100%, как в моем примере:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128) 

1
0