Fn_varbintohexstr kullanmadan varchar (32) türünde MD5 Hash dizesi oluşturmanın bir yolu var mı
SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32)
Böylece SCHEMABINDING ile bir görünüm içinde kullanılabilir
Fn_varbintohexstr kullanmadan varchar (32) türünde MD5 Hash dizesi oluşturmanın bir yolu var mı
SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32)
Böylece SCHEMABINDING ile bir görünüm içinde kullanılabilir
Yanıtlar:
CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2)
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
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 ...
LOWER()
yalnızca büyük / küçük harfe duyarlıysa gereklidir.
MD5
kıyasla özdeş Hash verir . Ben merak neden oldu gelen hashs farklıdır ve . Tarif için teşekkürler ..MD5()
Postgresql
MD5
Python
Postgresql
bunu dene:
select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', 'email@dot.com' )),3,32)
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)
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==