Konverter HashBytes til VARCHAR

stemmer
104

Jeg ønsker å få MD5 Hash av en streng verdi i SQL Server 2005. Jeg gjør dette med følgende kommando:

SELECT HashBytes('MD5', 'HelloWorld')

Men returnerer denne en varbinary stedet for en VARCHAR verdi. Hvis jeg prøver å konvertere 0x68E109F0F40CA72A15E05CC22786F8E6til en VARCHAR får jeg há ðô§*à\Â'†øæi stedet for 68E109F0F40CA72A15E05CC22786F8E6.

Er det noen SQL-basert løsning?

Ja

Publisert på 05/08/2008 klokken 11:49
kilden bruker
På andre språk...                            


7 svar

stemmer
135

Jeg har funnet løsningen andre steder:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
Svarte 05/08/2008 kl. 14:26
kilden bruker

stemmer
62
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)
Svarte 03/01/2011 kl. 14:26
kilden bruker

stemmer
29

Bruk master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)i stedet for master.dbo.fn_varbintohexstr, og deretter substringingresultatet.

Faktisk fn_varbintohexstrkaller fn_varbintohexsubstringinternt. Det første argumentet fn_varbintohexsubstringforteller det til å legge 0xFsom prefiks eller ikke. fn_varbintohexstrsamtaler fn_varbintohexsubstringmed 1som det første argumentet internaly.

Fordi du ikke trenger 0xF, kan du ringe fn_varbintohexsubstringdirekte.

Svarte 17/03/2011 kl. 16:00
kilden bruker

stemmer
18

I motsetning til hva David Knight sier, disse to alternativene returnere samme respons i 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))

Så det ser ut som den første er et bedre valg, fra versjon 2008.

Svarte 28/08/2014 kl. 05:35
kilden bruker

stemmer
10
convert(varchar(34), HASHBYTES('MD5','Hello World'),1)

(1 for konvertering av heksadesimal til strengen)

konvertere dette til å senke og fjerne 0x fra starten av strengen ved treng:

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

nøyaktig det samme som hva vi får i C # etter konvertering bytes til strengen

Svarte 07/09/2011 kl. 07:43
kilden bruker

stemmer
1

Med personlig erfaring med å bruke følgende kode i en lagret prosedyre som hash en SP variabel jeg kan bekrefte, men udokumentert, fungerer denne kombinasjonen 100% pr mitt eksempel:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)
Svarte 24/02/2015 kl. 22:54
kilden bruker

stemmer
-3

Endre datatypen til VARBINARY synes å fungere best for meg.

Svarte 17/02/2010 kl. 21:31
kilden bruker

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