कन्वर्ट हैशटैग को VarChar में


127

मैं SQL सर्वर 2005 में स्ट्रिंग मान का MD5 हैश प्राप्त करना चाहता हूं। मैं निम्नलिखित कमांड के साथ ऐसा करता हूं:

SELECT HashBytes('MD5', 'HelloWorld')

हालाँकि, यह VarChar मान के बजाय एक VarBinary देता है। अगर मुझे इसके बदले 0x68E109F0F40CA72A15E05CC22786F8E6मिलने वाले वर में बदलने का प्रयास किया जाए ।há ðô§*à\Â'†øæ68E109F0F40CA72A15E05CC22786F8E6

क्या कोई SQL- आधारित समाधान है?

हाँ

जवाबों:


147

मुझे इसका समाधान मिल गया है जहाँ:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)

19
fn_varbintohexstr डॉक्यूमेंटेड फंक्शन नहीं है। CONVERT (चार, @ मूल्य, 2) का उपयोग करें
Cheburek

मुझे बस गोदाम में अद्यतन के लिए एक रास्ते की आवश्यकता के रूप में भिन्नता से थोड़ा मिला। इसने एकदम जादू की तरह काम किया! धन्यवाद ...
nitefrog

यह विधि बहुत धीमी है, एक अनजाने फ़ंक्शन का उपयोग करती है और एज़्योर में काम नहीं करती है। अछा नहीं लगता। बजाय कन्वर्ट का उपयोग करें!
रॉकलैन

4
CONVERT () SQL 2005 में काम नहीं करता है। यदि आप SQL 2008 या इसके बाद के संस्करण का उपयोग कर रहे हैं, तो CONVERT () का उपयोग करें जो आप चाहते हैं। अफसोस की बात है कि मैं एक भी कमांड के बारे में नहीं जानता जो सभी SQL संस्करणों के लिए काम करेगा, इसलिए या तो अपनी स्क्रिप्ट में कुछ पागल संस्करण की जाँच करें, या बस कहीं नोट करें जिससे आपको SQL संस्करणों को अपग्रेड करने के लिए फ़ंक्शन को ठीक करने की आवश्यकता हो।
कार्ल बुसिमा

5
CONVERT (चार, @ मूल्य, 2) केवल 32 बाइट्स का उत्पादन करता है - यदि आप इसे sha1 हैश के लिए करते हैं तो आप इसे छोटा कर देंगे, आपको उचित आउटपुट रखने के लिए कन्वर्ट (चार (48), @ मान, 2) की आवश्यकता है।
एंड्रयू हिल

82
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)

4
यह SQL Azure में काम करता है। SHA1 के लिए: SELECT CONVERT (VARCHAR (40), HashBytes ('SHA1', 'Hello World'), 2)
Raptor

4
अनावश्यक रूप से nvarchar का उपयोग करने की आवश्यकता नहीं है।
इयान केम्प

3
प्रश्न में SQL Server 2005 कहा गया है और यदि आप ऊपर दिए गए सुझावों में से कोई भी करते हैं (और शायद किसी अन्य संस्करण के रूप में भी) तो वे वह नहीं करते हैं जो उनसे पूछा जाता है। आपको जो भी वर्ण बाइट्स के बराबर मिलता है, न कि बाइट्स एक हेक्स स्ट्रिंग के रूप में होता है जो कि पूछा जाता है। गेटकिलर और ज़ाराक्रॉन जवाब देते हैं कि काम करो।
डेविड नाइट

मैं इन रूपांतरित शैलियों के बारे में कहां पढ़ सकता हूं? 2 इस मामले में जो पैरामीटर के रूप में पारित किया गया है। और C # कोड में उस के बराबर कैसे बना जा सकता है? मुझे कौन सी एन्कोडिंग चुननी चाहिए?
Dmytro Zhluktenko

31

के master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)बजाय का उपयोग करें master.dbo.fn_varbintohexstrऔर फिर substringingपरिणाम।

वास्तव में आंतरिक रूप से fn_varbintohexstrकहता है fn_varbintohexsubstringfn_varbintohexsubstringइसे 0xFउपसर्ग या नहीं के रूप में जोड़ने का पहला तर्क बताता है । fn_varbintohexstrकॉल fn_varbintohexsubstringके साथ 1पहला तर्क internaly के रूप में।

क्योंकि आपको ज़रूरत नहीं है 0xF, fn_varbintohexsubstringसीधे कॉल करें ।


27

डेविड नाइट जो कहता है, उसके विपरीत , ये दोनों विकल्प 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))

तो ऐसा लगता है कि संस्करण 2008 से शुरू होने वाला पहला विकल्प एक बेहतर विकल्प है।


इसे गलती से टाइप न करें जो कि अलग-अलग उत्तर देता है! ... कन्वर्ट (varchar, HashBytes ('MD5', 'Hello World')), 2)
andrew pate

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

(हेक्साडेसिमल को स्ट्रिंग में बदलने के लिए 1)

इसे निचले में बदलें और स्ट्रिंग की शुरुआत से 0x को हटाकर प्रतिस्थापित करें:

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

बाइट्स को स्ट्रिंग में बदलने के बाद सी # में जो मिलता है, ठीक वैसा ही


2

एक संग्रहीत कार्यविधि के भीतर निम्नलिखित कोड का उपयोग करने के व्यक्तिगत अनुभव के साथ, जिसने एक एसपी चर को मार दिया, मैं पुष्टि कर सकता हूं, हालांकि अनिर्दिष्ट, यह संयोजन मेरे उदाहरण के अनुसार 100% काम करता है:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)

-3

डेटाटाइप को परिवर्तनशील में बदलना मेरे लिए सबसे अच्छा काम करता है।

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