Hasilkan string hash MD5 dengan T-SQL

Jawaban:

66

Gunakan HashBytes

SELECT HashBytes('MD5', '[email protected]')

Itu akan memberi Anda 0xF53BD08920E5D25809DF2563EF9C52B6

-

SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', '[email protected]'),2)

Itu akan memberi Anda F53BD08920E5D25809DF2563EF9C52B6

SQLMenace
sumber
1
@ Brendan, Anda meninggalkan ", 2)" di akhir.
Ryan Elkins
1
@RyanElkins Saya mendapatkan hasil yang sama dengan Brendan, dan saya pasti termasuk ", 2)" :(
Matius
20

Larutan:

SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','your text')),3,32)
Dellas
sumber
16

Tidak ada jawaban lain yang berhasil untuk saya. Perhatikan bahwa SQL Server akan memberikan hasil yang berbeda jika Anda mengirimkan string hard-code versus memberinya makan dari kolom di set hasil Anda. Di bawah ini adalah keajaiban yang berhasil bagi saya untuk memberikan kecocokan yang sempurna antara SQL Server dan MySql

select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, EmailAddress)), 2)) from ...
jmacinnes.dll
sumber
1
Penggunaan LOWER()hanya diperlukan jika peka huruf besar / kecil.
T.Coutlakis
Konversi pertama ternyata penting. Ini memberikan MD5Hash identik dibandingkan dengan MD5()fungsi Postgresql. Saya heran mengapa MD5hash berbeda dari Pythondan Postgresql. Terima kasih untuk resepnya ..
Ben
14

Untuk data hingga 8000 karakter, gunakan:

CONVERT(VARCHAR(32), HashBytes('MD5', '[email protected]'), 2)

Demo

Untuk data biner (tanpa batas 8000 byte) gunakan:

CONVERT(VARCHAR(32), master.sys.fn_repl_hash_binary(@binary_data), 2)

Demo

slartidan
sumber
4

coba ini:

select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',  '[email protected]' )),3,32) 
dellasavia
sumber
0
declare @hash nvarchar(50)
--declare @hash varchar(50)

set @hash = '1111111-2;20190110143334;001'  -- result a5cd84bfc56e245bbf81210f05b7f65f
declare @value varbinary(max);
set @value = convert(varbinary(max),@hash);


select  
 SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', '1111111-2;20190110143334;001')),3,32) as 'OK'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', @hash)),3,32) as 'ERROR_01'
,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',convert(varbinary(max),@hash))),3,32) as 'ERROR_02'
,SUBSTRING(sys.fn_sqlvarbasetostr(sys.fn_repl_hash_binary(convert(varbinary(max),@hash))),3,32)
,SUBSTRING(sys.fn_sqlvarbasetostr(master.sys.fn_repl_hash_binary(@value)),3,32)
fernando yevenes
sumber
Solusi ... nyatakan @hash varchar (50) md5.gromweb.com/?string=1111111-2%3B20190110143334%3B001
fernando yevenes
0
SELECT CONVERT(
      VARCHAR(32),
      HASHBYTES(
                   'MD5',
                   CAST(prescrip.IsExpressExamRX AS VARCHAR(250))
                   + CAST(prescrip.[Description] AS VARCHAR(250))
               ),
      2
  ) MD5_Value;

bekerja untuk saya.

Gita
sumber
0

Anda tidak secara eksplisit mengatakan Anda ingin string menjadi hex; Jika Anda terbuka untuk pengkodean string base 64 yang lebih hemat ruang, dan Anda menggunakan SQL Server 2016 atau yang lebih baru, berikut adalah alternatifnya:

select SubString(h, 1, 32) from OpenJson(
    (select HashBytes('MD5', '[email protected]') h for json path)
) with (h nvarchar(max));

Ini menghasilkan:

9TvQiSDl0lgJ3yVj75xStg==
N8allan
sumber