T-SQL के साथ MD5 हैश स्ट्रिंग उत्पन्न करें


99

वहाँ fn_varbintohexstr का उपयोग किए बिना प्रकार varchar (32) के एमडी 5 हैश स्ट्रिंग उत्पन्न करने का एक तरीका है

SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32)

तो इसका उपयोग SCHEMABINDING वाले दृश्य के अंदर किया जा सकता है


यह भी देखें stackoverflow.com/questions/35200452/...
बेन

जवाबों:



66

HashBytes का उपयोग करें

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

जो आपको 0xF53BD08920E5D25809DF2563EF9C52B6 देगा

-

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

जो आपको F53BD08920E5D25809DF2563EF9C52B6 देगा


1
@ ब्रेंडन, आपने अंत में ", 2)" को छोड़ दिया।
रयान एल्किन्स

1
@ रियान एल्किन्स मुझे ब्रेंडन के समान परिणाम मिलता है, और मैं निश्चित रूप से "2,") को शामिल कर रहा हूं :(
मैथ्यू


16

अन्य किसी भी उत्तर ने मेरे लिए काम नहीं किया। ध्यान दें कि यदि आप हार्ड-कोडेड स्ट्रिंग में पास करते हैं तो SQL सर्वर अलग-अलग परिणाम देगा। इसे अपने परिणाम सेट में एक कॉलम से फीड करें। नीचे वह जादू है जो मेरे लिए SQL Server और MySql के बीच एक परिपूर्ण मेल देने के लिए काम करता है

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

1
LOWER()केस सेंसिटिव होने पर ही इस्तेमाल करना जरूरी है।
T.Coutlakis

पहला रूपांतरण महत्वपूर्ण निकला। यह फंक्शन के MD5मुकाबले समान हैश देता MD5()है Postgresql। मुझे आश्चर्य था कि MD5हैश अलग Pythonऔर से क्यों Postgresql। नुस्खा के लिए धन्यवाद ..
बेन

14

8000 वर्णों तक के डेटा के लिए :

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

Demo

बाइनरी डेटा के लिए (8000 बाइट्स की सीमा के बिना) का उपयोग करें:

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

Demo


4

इसे इस्तेमाल करे:

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;

मेरे लिये कार्य करता है।


0

आपने स्पष्ट रूप से यह नहीं कहा कि आप स्ट्रिंग को हेक्स चाहते थे; यदि आप अधिक स्थान कुशल बेस 64 स्ट्रिंग एन्कोडिंग के लिए खुले हैं, और आप SQL सर्वर 2016 या उसके बाद का उपयोग कर रहे हैं, तो यहां एक विकल्प है:

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

यह उत्पादन करता है:

9TvQiSDl0lgJ3yVj75xStg==
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.