Desejo obter o hash MD5 de um valor de seqüência de caracteres no SQL Server 2005. Faço isso com o seguinte comando:
SELECT HashBytes('MD5', 'HelloWorld')
No entanto, isso retorna um VarBinary em vez de um valor VarChar. Se eu tentar converter 0x68E109F0F40CA72A15E05CC22786F8E6
em um VarChar, em há ðô§*à\Â'†øæ
vez de 68E109F0F40CA72A15E05CC22786F8E6
.
Existe alguma solução baseada em SQL?
sql
sql-server
GateKiller
fonte
fonte
fonte
Use em
master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)
vez demaster.dbo.fn_varbintohexstr
e, em seguida,substringing
o resultado.De fato
fn_varbintohexstr
chamafn_varbintohexsubstring
internamente. O primeiro argumento defn_varbintohexsubstring
diz para adicionar0xF
como prefixo ou não.fn_varbintohexstr
chamafn_varbintohexsubstring
com1
como o primeiro argumento internamente.Porque você não precisa
0xF
, liguefn_varbintohexsubstring
diretamente.fonte
Ao contrário do que David Knight diz, essas duas alternativas retornam a mesma resposta no MS SQL 2008:
Portanto, parece que o primeiro é uma escolha melhor, a partir da versão 2008.
fonte
(1 para converter hexadecimal em string)
converta isso para abaixar e remova 0x do início da cadeia de caracteres por substring:
exatamente o mesmo que obtemos em c # depois de converter bytes em string
fonte
Com a experiência pessoal de usar o seguinte código em um Procedimento Armazenado que Hashed uma Variável SP, posso confirmar, embora não documentada, essa combinação funciona 100% conforme meu exemplo:
fonte
Alterar o tipo de dados para varbinary parece funcionar melhor para mim.
fonte