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

голоса
102

Я хочу, чтобы получить MD5 хеш значения строки в SQL Server 2005. Я сделать это с помощью следующей команды:

SELECT HashBytes('MD5', 'HelloWorld')

Тем не менее, это возвращает VARBINARY вместо значения VARCHAR. Если я пытаюсь преобразовать 0x68E109F0F40CA72A15E05CC22786F8E6в VARCHAR я получаю há ðô§*à\Â'†øæвместо 68E109F0F40CA72A15E05CC22786F8E6.

Есть ли SQL-решение?

да

Задан 05/08/2008 в 12:49
источник пользователем
На других языках...                            


7 ответов

голоса
134

Я нашел решение ELSE, где:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
Ответил 05/08/2008 d 15:26
источник пользователем

голоса
59
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)
Ответил 03/01/2011 d 15:26
источник пользователем

голоса
29

Используйте 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первым аргументом internaly.

Потому что вам не нужно 0xF, звоните fn_varbintohexsubstringнепосредственно.

Ответил 17/03/2011 d 17:00
источник пользователем

голоса
15

Вопреки тому , что Дэвид Найт говорит, эти два варианта возвращают один и тот же ответ в 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))

Так это выглядит как первый из них является лучшим выбором, начиная с версии 2008 года.

Ответил 28/08/2014 d 06:35
источник пользователем

голоса
8
convert(varchar(34), HASHBYTES('MD5','Hello World'),1)

(1 для преобразования шестнадцатеричного в строку)

преобразовать это понизить и удалить 0x с начала строки по подстроке:

substring(lower(convert(varchar(34), HASHBYTES('MD5','Hello World'),1)),3,32)

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

Ответил 07/09/2011 d 08:43
источник пользователем

голоса
1

С личного опыта, используя следующий код в хранимой процедуре, которая HASHED в SP Variable я могу подтвердить, хотя без документов, эта комбинация работает 100%, так как в моем примере:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)
Ответил 24/02/2015 d 22:54
источник пользователем

голоса
-3

Изменение типа данных в VARBINARY, кажется, работает лучше для меня.

Ответил 17/02/2010 d 22:31
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more