Converter HashBytes para VarChar

votos
102

Eu quero começar o hash MD5 de um valor de seqüência no SQL Server 2005. Eu faço isso com o seguinte comando:

SELECT HashBytes('MD5', 'HelloWorld')

No entanto, isso retorna um VarBinary vez de um valor VarChar. Se eu tentar converter 0x68E109F0F40CA72A15E05CC22786F8E6em um VarChar eu chegar há ðô§*à\Â'†øæem vez de 68E109F0F40CA72A15E05CC22786F8E6.

Existe alguma solução baseada em SQL?

sim

Publicado 05/08/2008 em 12:49
fonte usuário
Em outras línguas...                            


7 respostas

votos
134

Eu encontrei a outra solução que:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
Respondeu 05/08/2008 em 15:26
fonte usuário

votos
59
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)
Respondeu 03/01/2011 em 15:26
fonte usuário

votos
29

Use master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)em vez de master.dbo.fn_varbintohexstre depois substringingo resultado.

Na verdade fn_varbintohexstrchama fn_varbintohexsubstringinternamente. O primeiro argumento de fn_varbintohexsubstringdiz-lhe para adicionar 0xFcomo prefixo ou não. fn_varbintohexstrchama fn_varbintohexsubstringcom 1como o primeiro argumento internamente.

Porque você não precisa 0xF, ligue fn_varbintohexsubstringdiretamente.

Respondeu 17/03/2011 em 17:00
fonte usuário

votos
15

Ao contrário do que David Cavaleiro diz, estas duas alternativas retornar a mesma resposta em 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))

Portanto, parece que o primeiro é uma escolha melhor, a partir da versão de 2008.

Respondeu 28/08/2014 em 06:35
fonte usuário

votos
8
convert(varchar(34), HASHBYTES('MD5','Hello World'),1)

(1 para a conversão de hexadecimal em cadeia)

converter este para diminuir e remover 0x desde o início da string por substring:

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

exatamente o mesmo que o que temos em C # após a conversão de bytes para string

Respondeu 07/09/2011 em 08:43
fonte usuário

votos
1

Com a experiência pessoal de utilizar o seguinte código dentro de um procedimento armazenado que picado uma variável SP posso confirmar, embora não documentada, esta combinação funciona 100% de acordo com o meu exemplo:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)
Respondeu 24/02/2015 em 22:54
fonte usuário

votos
-3

Alterar o tipo de dados para varbinary parece funcionar melhor para mim.

Respondeu 17/02/2010 em 22:31
fonte usuário

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