HashBytes फ़ंक्शन में सही एल्गोरिदम चुनना


20

हमें तुलनात्मक उद्देश्यों के लिए nvarchar डेटा का हैश मान बनाने की आवश्यकता है। टी-एसक्यूएल में कई हैश एल्गोरिदम उपलब्ध हैं, लेकिन इस परिदृश्य में से चुनने के लिए कौन सा सबसे अच्छा है?

हम दो अलग नवरच मान के लिए डुप्लिकेट हैश मान होने के जोखिम को कम से कम करना चाहते हैं। इंटरनेट पर मेरे शोध के आधार पर MD5 सबसे अच्छा लगता है। क्या वह सही है? MSDN हमें उपलब्ध एल्गोरिदम के बारे में (नीचे लिंक) बताता है, लेकिन कोई भी किस स्थिति के लिए इसका वर्णन नहीं करता है?

HASHBYTES (लेनदेन एसक्यूएल)

हमें दो नवरच (अधिकतम) स्तंभों पर दो तालिकाओं से जुड़ने की आवश्यकता है। जैसा कि आप सोच सकते हैं कि क्वेरी को निष्पादित करने में समय लगता है। हमने सोचा कि प्रत्येक nvarchar (अधिकतम) डेटा के हैश मान को रखना बेहतर होगा और nvarchar (अधिकतम) मानों के बजाय हैश मानों पर शामिल हों जो ब्लॉब्स हैं। सवाल यह है कि हैश एल्गोरिथ्म विशिष्टता प्रदान करता है, ताकि हम एक से अधिक नवरच (अधिकतम) के लिए एक हैश मान होने के जोखिम में न चलें।

जवाबों:


18

HASHBYTESसमारोह केवल इनपुट के रूप में 8000 बाइट तक ले जाता है। क्योंकि आपके इनपुट संभावित रूप से बड़े हैं, जिस फ़ील्ड में हैशेड डुप्लिकेट हो गया है , उसके कारण टकराव का कारण बनेगा, भले ही एल्गोरिथम को चुना गया हो। ध्यान से उस डेटा की सीमा पर विचार करें जिसे आपने हैश करने की योजना बनाई है - पहले 4000 अक्षरों का उपयोग करना स्पष्ट पसंद है, लेकिन आपके डेटा के लिए सबसे अच्छा विकल्प नहीं हो सकता है ।

किसी भी घटना में, हैश फ़ंक्शन क्या है, भले ही इनपुट 8000 बाइट्स या उससे कम हो, परिणामों में 100% शुद्धता सुनिश्चित करने का एकमात्र तरीका आधार मान की तुलना किसी बिंदु पर करना है (पढ़ें: जरूरी नहीं कि पहले )। अवधि।

व्यवसाय यह निर्धारित करेगा कि 100% सटीकता की आवश्यकता है या नहीं। यह आपको बताएगा कि या तो (a) आधार मानों की तुलना करना आवश्यक है , या (b) आपको आधार मानों की तुलना नहीं करने पर विचार करना चाहिए - प्रदर्शन के लिए कितनी सटीकता से कारोबार करना चाहिए।

जबकि हैश टक्कर एक अद्वितीय इनपुट सेट में संभव है, वे infinitesimally दुर्लभ हैं, चाहे एल्गोरिथ्म चुना गया हो। इस परिदृश्य में हैश मान का उपयोग करने का पूरा विचार कुशलतापूर्वक एक अधिक प्रबंधनीय सेट में शामिल होने के परिणामों को कम करने के लिए है, जरूरी नहीं कि परिणाम के अंतिम सेट पर तुरंत पहुंचें। फिर से, 100% सटीकता के लिए, यह प्रक्रिया का अंतिम चरण नहीं हो सकता है। यह परिदृश्य क्रिप्टोग्राफी के उद्देश्य के लिए हैशिंग का उपयोग नहीं कर रहा है, इसलिए एमडी 5 जैसे एक एल्गोरिथ्म ठीक काम करेगा।

मेरे लिए "सटीकता" उद्देश्यों के लिए SHA-x एल्गोरिथ्म में जाने को सही ठहराना बहुत कठिन होगा क्योंकि यदि व्यवसाय एमडी 5 की मिनीस्कूल टकराव की संभावनाओं के बारे में पता लगाने जा रहा है, तो संभावना है कि वे भी बाहर जा रहे हैं SHA-x एल्गोरिदम सही नहीं हैं। उन्हें या तो मामूली अशुद्धि के साथ आना होगा, या यह जनादेश देना होगा कि प्रश्न 100% सटीक हो और संबद्ध तकनीकी निहितार्थों के साथ रहें। मुझे लगता है कि अगर सीईओ एमडी 5 के बजाय SHA-x का उपयोग करते हुए रात में बेहतर सोता है, तो ठीक है; यह अभी भी इस मामले में तकनीकी दृष्टिकोण से ज्यादा मायने नहीं रखता है।

प्रदर्शन की बात करें तो, यदि तालिकाएं ज्यादातर पढ़ी जाती हैं और इसमें शामिल होने के परिणाम की अक्सर आवश्यकता होती है, तो हर बार अनुरोध किए जाने पर संपूर्ण सम्मिलित होने की गणना करने की आवश्यकता को समाप्त करने के लिए अनुक्रमित दृश्य को लागू करने पर विचार करें। बेशक आप उस के लिए भंडारण बंद कर देते हैं, लेकिन प्रदर्शन में सुधार के लिए यह अच्छी तरह से इसके लायक हो सकता है, खासकर अगर 100% सटीकता की आवश्यकता होती है।

लंबे स्ट्रिंग मानों को अनुक्रमित करने के बारे में आगे पढ़ने के लिए, मैंने एक लेख प्रकाशित किया जो इस बात का उदाहरण है कि इस तालिका के लिए कैसे करें, और इस प्रश्न में पूर्ण परिदृश्य का प्रयास करते समय विचार करने के लिए चीजें प्रस्तुत करता है।


8

एमडी 5 ठीक होना चाहिए और आउटपुट को एक बाइनरी (16) में संग्रहीत किया जा सकता है। टकराव की संभावना ( जन्मदिन के विरोधाभास देखें ) अभी भी बहुत कम है, यहां तक ​​कि एक बड़े भौतिक नमूना आकार के साथ भी। SHA-1 के आउटपुट में 20 बाइट्स लगते हैं और SHA-256 के आउटपुट में 32 बाइट्स लगते हैं। जब तक आपके पास इतनी बड़ी संख्या में रिकॉर्ड नहीं होंगे कि आपके जन्मदिन की टक्कर की संभावना महत्वपूर्ण हो जाती है (शारीरिक रूप से असंभव या वर्तमान हार्डवेयर प्रौद्योगिकियों के साथ कम से कम अव्यावहारिक) तो यह ठीक होगा।


4

मैं SHA-1 के साथ जाऊंगा यह उपलब्ध एल्गोरिदम में से एक बेहतर है और इन सभी में से कम से कम टक्कर की उम्मीद है (MD5 की तुलना में 2 ^ 51 जो 2 ^ 20.96 है)। MD5 भी कुछ परिदृश्यों में टकराव के लिए कमजोर साबित हुआ है।

सूत्रों का कहना है:

http://en.wikipedia.org/wiki/SHA-1 http://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions#Cryptanalysis http://en.wikipedia.org/wiki/MD5


0

मैंने इसका उल्लेख उत्तरों में नहीं बल्कि MSDN के अनुसार देखा है :

SQL सर्वर 2016 (13.x) के साथ शुरुआत करके, SHA2_256 और SHA2_512 के अलावा सभी एल्गोरिदम को हटा दिया जाता है। पुराने एल्गोरिदम (अनुशंसित नहीं) काम करना जारी रखेंगे, लेकिन वे एक घटना को बढ़ाएंगे।

मैंने एक समान प्रश्न पूछा तो यह आप पर निर्भर है कि क्या आप एमडी 5 (यदि आप 2016+ पर हैं) जैसे पदावनत समारोह का उपयोग करना चाहते हैं। आप यह देखने के लिए परीक्षण कर सकते हैं कि MD5 और SHA2 के बीच संग्रहण और प्रदर्शन में कितना अंतर है।

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