T-SQL ile MD5 hash dizesi oluşturun


Yanıtlar:



66

HashBytes kullan

SELECT HashBytes('MD5', 'email@dot.com')

Bu size 0xF53BD08920E5D25809DF2563EF9C52B6 verecek

-

SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'email@dot.com'),2)

Bu size F53BD08920E5D25809DF2563EF9C52B6 verecek


1
@Brendan, sonunda ", 2)" yi bıraktın.
Ryan Elkins

1
@RyanElkins Brendan ile aynı sonucu alıyorum ve kesinlikle ", 2)" ifadesine dahil oldum :(
Matthew

20

Çözüm:

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

16

Diğer cevapların hiçbiri benim için işe yaramadı. SQL Server'ın, sabit kodlanmış bir dizeyi, sonuç kümenizdeki bir sütundan beslemenin yerine geçerseniz farklı sonuçlar vereceğini unutmayın. Aşağıda, SQL Server ve MySql arasında mükemmel bir eşleşme sağlamak için benim için çalışan sihir var

select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, EmailAddress)), 2)) from ...

1
Kullanımı LOWER()yalnızca büyük / küçük harfe duyarlıysa gereklidir.
T.Coutlakis

İlk dönüşümün önemli olduğu ortaya çıktı. Bu, işlevine MD5kıyasla özdeş Hash verir . Ben merak neden oldu gelen hashs farklıdır ve . Tarif için teşekkürler ..MD5()PostgresqlMD5PythonPostgresql
Ben

14

8000 karaktere kadar olan veriler için şunları kullanın:

CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2)

Demo

İkili veriler için (8000 bayt sınırı olmadan) şunu kullanın:

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

Demo


4

bunu dene:

select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',  'email@dot.com' )),3,32) 

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)


0
SELECT CONVERT(
      VARCHAR(32),
      HASHBYTES(
                   'MD5',
                   CAST(prescrip.IsExpressExamRX AS VARCHAR(250))
                   + CAST(prescrip.[Description] AS VARCHAR(250))
               ),
      2
  ) MD5_Value;

benim için çalışıyor.


0

Dizenin onaltılık olmasını istediğinizi açıkça söylemediniz; Daha fazla alan verimli temel 64 dize kodlamasına açıksanız ve SQL Server 2016 veya sonraki bir sürümünü kullanıyorsanız, işte bir alternatif:

select SubString(h, 1, 32) from OpenJson(
    (select HashBytes('MD5', 'email@dot.com') h for json path)
) with (h nvarchar(max));

Bu şunları üretir:

9TvQiSDl0lgJ3yVj75xStg==
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.