क्रिप्टोग्राफी में हैशिंग

क्या आप क्रिप्टोग्राफी में हैशिंग के बारे में सीखना चाहते हैं? यदि आप करते हैं, तो आप सही जगह पर आए हैं.

इस लेख में, हम हैशिंग के बारे में अधिक जानकारी प्राप्त करेंगे.

हाशिंग वस्तुओं या मूल्यों के समूह से वस्तुओं या मूल्यों की पहचान करने के लिए एक कंप्यूटर विज्ञान तकनीक है.

भ्रामक लगता है?

उदाहरण द्वारा समझने की कोशिश करते हैं.

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

एक अन्य लोकप्रिय उदाहरण पुस्तकालय है जहां आपको अलमारियों पर टन किताबें मिलेंगी। प्रत्येक पुस्तक की अपनी विशिष्ट पहचान संख्या होती है ताकि वह विशाल पुस्तकालय में स्थित हो सके!

हैशिंग का एक आधुनिक उदाहरण खेल के खिलाड़ी होंगे जो खेल के लिए पंजीकरण करते हैं। Valorant एक फ्री-टू-प्ले गेम है जिसे Riot द्वारा लॉन्च किया गया है। फ्री-टू-प्ले होने का मतलब है कि लाखों लोग गेम खेलेंगे.

प्रत्येक खिलाड़ी को हैशिंग एल्गोरिथ्म का उपयोग करके उत्पन्न एक विशिष्ट पहचान मूल्य का उपयोग करके पहचाना जाता है.

इसे नीचे और अधिक विस्तार से समझने की कोशिश करते हैं.

 

हाशिंग क्या है?

जैसा कि ऊपर कहा गया है, हैशिंग एक समूह से एक वस्तु की पहचान करने की विधि है.


एक बार हैश किए जाने पर प्रत्येक ऑब्जेक्ट को एक विशिष्ट पहचान संख्या मिलती है.

लेकिन, तकनीकी तौर पर इसका क्या मतलब है?

तकनीकी रूप से, एक गणितीय फ़ंक्शन किसी भी लंबाई के इनपुट स्ट्रिंग से एक निश्चित-लंबाई आउटपुट उत्पन्न करता है.

बिटकॉइन लेन-देन हैश किए गए हैं जहां लेनदेन को अद्वितीय आईडी मिलती है.

यदि आप “हैलो, वर्ल्ड!” में SHA-256 हैशिंग एल्गोरिथ्म, आपको निम्न आउटपुट मिलेगा:

इनपुट: नमस्ते दुनिया!

आउटपुट: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f

यहां SHA256 दिए गए इनपुट से आउटपुट जेनरेट करता है। जैसा कि आप देख सकते हैं, हमने सिक्योर हैश फंक्शन (SHA-256) हैशिंग एल्गोरिथम का उपयोग किया। यह मैसेज डायरेक्ट (MD5) और सिक्योर हैश फंक्शन (SHA1) सहित लोकप्रिय हैशिंग विधियों में से एक है।.

हैश फ़ंक्शन के प्रमुख गुण इसे विश्वसनीय बनाते हैं। उन्हें नीचे सूचीबद्ध करें.

  • नियतात्मक → इसका अर्थ है कि किसी भी परिस्थिति में दिए गए इनपुट के लिए आउटपुट समान होगा.
  • प्रीइमेज रेसिस्टेंट → प्रीइमेज रेसिस्टेंट फीचर यह सुनिश्चित करता है कि हैश वैल्यू इनपुट वैल्यू जनरेट करने के लिए उपयोगी नहीं है.
  • कम्प्यूटेशनल रूप से कुशल → हैश फ़ंक्शन कुशल हैं और निष्पादित करने के लिए विशाल कम्प्यूटेशनल संसाधनों की आवश्यकता नहीं है.
  • इंजीनियर को उलटा नहीं किया जा सकता → हैश फ़ंक्शन को उलट नहीं किया जा सकता है.
  • टक्कर प्रतिरोधी → टकराव प्रतिरोध यह सुनिश्चित करता है कि कोई भी दो इनपुट समान आउटपुट में परिणत न हों.

हमने यहां शुरुआती लोगों के लिए क्रिप्टोग्राफिक हैशिंग को पहले ही कवर कर लिया है। इसे देखें: क्रिप्टोग्राफिक हैशिंग: एक शुरुआती गाइड. 

लेकिन, यदि आप उन्नत सामान के लिए यहां हैं, तो आप निराश नहीं होंगे.

 

हैश फंक्शन और हैश टेबल क्या है? और वे कैसे काम करते हैं?

इस खंड में, हम अधिक विस्तार से हैश फ़ंक्शन और हैश तालिकाओं का पता लगाएंगे। हैशिंग के संदर्भ में, हैश फ़ंक्शन हैं। ये कार्य बड़े इनपुट को छोटे फिक्स्ड इनपुट में परिवर्तित करने के लिए जिम्मेदार हैं। हैश टेबल आउटपुट को स्टोर करता है.

हैशिंग प्रक्रिया में, वस्तुओं को उनकी कुंजी / मान जोड़े के आधार पर सरणी में वितरित किया जाता है। इसलिए, यदि आप हैश फ़ंक्शन के लिए तत्वों की एक सरणी पास करते हैं, तो आपको एक सरणी आउटपुट मिलेगा जहां प्रत्येक तत्व में अब एक कुंजी जुड़ी हुई है। जब यह एक प्रभावशाली O (1) समय प्रदान करता है तो कुंजी / मान युग्म वास्तविक समय में तत्वों तक पहुँचने के लिए बहुत उपयोगी होता है.

हैश कार्यों को लागू करने के लिए, आप दो पसंदीदा दृष्टिकोणों को हटा सकते हैं.

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

दूसरी विधि में, कार्य निम्नानुसार होंगे:

हैश = हैश_फंक्शन (कुंजी) index = हैश% array_size

यहाँ, हैश और सरणी आकार एक दूसरे से स्वतंत्र हैं। सूचकांक मूल्य की गणना सरणी आकार के आधार पर की जाती है। मोडुलो ऑपरेटर (%) हमें मूल्य की गणना करने में सक्षम बनाता है.

साधारण शब्दों में, हैश फ़ंक्शन को एक फ़ंक्शन के रूप में परिभाषित किया जा सकता है जो एक निश्चित आकार के डेटा सेट पर मनमाने आकार के डेटा को मैप कर सकता है। परिणामी निश्चित आकार के डेटा सेट को हैश तालिका में संग्रहीत किया जा सकता है। हैश फ़ंक्शन द्वारा लौटाए गए मानों को कई नाम दिए गए हैं। उन्हें हैश मान, हैश, हैश रकम और हैश कोड कहा जा सकता है.

 

एक अच्छा हैश फंक्शन लिखना

यदि आप एक अच्छा हैश फ़ंक्शन या तंत्र बनाना चाहते हैं, तो आपको एक बनाने की बुनियादी आवश्यकताओं को समझना होगा। उन्हें नीचे सूचीबद्ध करें:

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

तकनीकी रूप से, टक्कर एक हैश फ़ंक्शन का हिस्सा है, और इसे केवल हैश फ़ंक्शन से हटाया नहीं जा सकता है। लक्ष्य एक हैश फ़ंक्शन बनाना है जो अच्छे हैश तालिका प्रदर्शन की पेशकश कर सकता है और टक्कर रिज़ॉल्यूशन तकनीकों के माध्यम से टकराव को हल कर सकता है.

 

क्यों हमें एक अच्छा हैश फंक्शन चाहिए?

एक उपयोगी हैश फ़ंक्शन की आवश्यकता को समझने के लिए, नीचे दिए गए उदाहरण के माध्यम से जाने दें.

मान लें कि हम हैशिंग तकनीक का उपयोग करके एक हैश टेबल बनाना चाहते हैं जहां इनपुट स्ट्रिंग्स निम्नानुसार होंगे, {“agk”, “kag”, “gak”, “ankg”, “kga”, “gka”}।

अब, हम एक हैश फ़ंक्शन बनाते हैं जो बस एक (97), जी (103), और के (107) के एएससीआईआई मूल्य को जोड़ता है और फिर योग का एक मॉडुलो 307 करता है।.

स्पष्ट रूप से, तीनों संख्याओं का योग भी 307 है। इसका मतलब है कि यदि हम सभी संख्याओं की अनुमति देते हैं और फिर एक modulo ऑपरेशन करते हैं, तो हमें वही परिणाम मिलेगा। अंतिम परिणाम सभी स्ट्रिंग्स को एक ही इंडेक्स संख्या में जमा करना होगा। हैश फ़ंक्शन के लिए एल्गोरिदम का समय भी ओ (एन) जटिलता होगा, जो वांछनीय नहीं है। हम आसानी से निष्कर्ष निकाल सकते हैं कि जिस हैश फ़ंक्शन का हमने वर्णन किया है वह वास्तविक जीवन के परिदृश्यों के लिए इष्टतम नहीं है.

हैश फ़ंक्शन को ठीक करने के लिए, हम प्रत्येक तत्व के ASCII मानों को अन्य अभाज्य संख्या 727 से विभाजित करते हुए तैनात कर सकते हैं। ऐसा करने से, हम अपने दिए गए इनपुट स्ट्रिंग्स एरे के लिए एक अलग आउटपुट प्राप्त करेंगे।.

 

हैश टेबल्स के बारे में सीखना

हैश फ़ंक्शन के परिणाम को संग्रहीत करने के लिए हैश टेबल बहुत उपयोगी होते हैं, जो सूचकांक की गणना करता है और फिर इसके खिलाफ एक मूल्य संग्रहीत करता है। अंतिम परिणाम ओ (1) जटिलता के साथ तेजी से कम्प्यूटेशनल प्रक्रिया होगी.

ओ (एन) समय की आवश्यकता वाली समस्याओं को हल करने में हैश टेबल परंपरागत रूप से एक अच्छा विकल्प है.

इसलिए, यदि आप एक निश्चित लंबाई की स्ट्रिंग उठाते हैं और फिर स्ट्रिंग के वर्ण आवृत्ति को सीखने का प्रयास करते हैं.

इसलिए, यदि स्ट्रिंग = “aacddce” है, तो एक सामान्य दृष्टिकोण स्ट्रिंग के माध्यम से कई बार जाना है और प्रत्येक आवृत्ति को संग्रहीत करना है.

# एक इनपुट स्ट्रिंग प्रदान करें, और उस स्ट्रिंग में वर्णों की आवृत्ति गिनें

# एल्गोरिथ्म 0 (एन) जटिलता समय है

temp_list = [] start = "ए" str = "ababcddefff" def Alpha_zeta (): alpha = ‘a’ for i (रेंज में 0,26): temp_list.append (अल्फ़ा) Alpha = chr (ord (अल्फा) + 1) return temp_list temp_list = अल्फ़ा-zeta () #print (temp_list) def character_frequency (str, temp_list): प्रत्येक में temp_list: freq = 0 for i in str: if (i == प्रत्येक): freq = freq + 1 प्रिंट (प्रत्येक, freq) character_requency (str, temp_list)

उपरोक्त कार्यक्रम का आउटपुट निम्नानुसार होगा:

एक 2 बी 2 सी 1 डी 2 ई 1 एफ 3 जी 0 एच 0 आई 0 0 .. ..

अब, C ++ में एक हैश तालिका लागू करें और वर्ण आवृत्ति की गणना करें.

# नामस्थान std का उपयोग करके हटा दें; int फ़्रिक्वेंसी [26]; int hashFunc (char c) {वापसी (c – ‘a’); } शून्य गणना< S.length (); ++ i) {int index = hashFunc (S [i]); आवृत्ति [सूचकांक] ++; } के लिए (इंट i = 0; मैं<26; ++ i) {cout << (चार) (i + ‘a’) << ” << आवृत्ति [i]<< एंडल; }} Int main () {cout<<"नमस्ते दुनिया"; गिनती"abbaccbdd"); }

कार्यक्रम का आउटपुट निम्नानुसार होगा:

एक 2 बी 3 सी 2 डी 2

एल्गोरिथ्म की O (N) जटिलता अन्य रैखिक दृष्टिकोणों की तुलना में इसे तेज बनाती है.

Collisions कैसे हल करें

हैश कार्यों में टकराव को हल करने के लिए अद्वितीय तरीके हैं। लोकप्रिय तरीकों में से एक अलग चेनिंग है जिसे ओपन हैशिंग के रूप में भी जाना जाता है। इसे एक लिंक की गई सूची के साथ लागू किया जाता है जहां श्रृंखला में प्रत्येक तत्व स्वयं एक लिंक की गई सूची है। यह दृष्टिकोण तत्वों को संग्रहीत करने में सक्षम बनाता है और यह सुनिश्चित करता है कि कुछ तत्व टकराव को हल करने वाली विशिष्ट लिंक सूची का ही हिस्सा हैं। इसका मतलब है कि कोई भी दो इनपुट मानों का समान आउटपुट हैश मान नहीं हो सकता है.

 

पायथन में हैश की खोज

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

जैसा कि हैशिंग एक सामान्य कार्य है, यह पहले से ही पायथन पुस्तकालय में लागू है। मॉड्यूल का उपयोग करके, आप किसी वस्तु को उसके इनपुट के रूप में प्रदान कर सकते हैं और फिर हैशेड मान वापस कर सकते हैं.

हैश विधि का सिंटैक्स है:

हैश (वस्तु)

जैसा कि आप देख सकते हैं, यह एक एकल पैरामीटर में लेता है, जो ऑब्जेक्ट है। ऑब्जेक्ट पूर्णांक, फ्लोट या स्ट्रिंग हो सकता है.

हैश () विधि का लौटा मूल्य इनपुट पर निर्भर करता है। पूर्णांक के लिए, यह उसी संख्या को वापस कर सकता है जबकि दशमलव और स्ट्रिंग के लिए अलग होगा.

आइए नीचे कुछ उदाहरण देखें.

संख्या = 10 डेसी = 1.23556 str1 = "नीतीश" प्रिंट (हैश (संख्या)) प्रिंट (हैश (डेसी)) प्रिंट (हैश (str1))

उपरोक्त कोड का आउटपुट निम्नानुसार है:

हालाँकि, हैशिंग को सभी ऑब्जेक्ट प्रकारों पर लागू नहीं किया जा सकता है। उदाहरण के लिए, यदि आपको याद है कि हमने अपने पहले प्रोग्राम में z की सूची बनाई है। अगर हम इसे हैश करने की कोशिश करते हैं, तो आउटपुट विंडो टाइप-ए-ट्राउजर: अनसैचुरल टाइप: ’लिस्ट’ के जरिए आएगी।

हैशिंग को ऑब्जेक्ट सूची में लागू करने के लिए, आपको टपल का उपयोग करने की आवश्यकता है.

स्वर = (‘a’, ‘e’, ​​’i’, ‘o’, ‘u’) प्रिंट (हैश (स्वर)) आउटपुट ⇒ -5678652950122127926

क्रिप्टोग्राफी में हैशिंग

क्रिप्टोग्राफी में हैशिंग उपयोगी है। बिटकॉइन हैशिंग का उपयोग मर्कल ट्री बनाने और प्रबंधित करने के लिए करता है

इसके अलावा, हैशिंग काफी लंबे समय तक क्रिप्टोग्राफी का हिस्सा रहे हैं। हालांकि, हैशिंग का सबसे अच्छा उपयोग हैश के पासवर्ड और उन्हें स्टोर करने के लिए किया जाता है. 

मर्कल ट्रीज़

मर्कल ट्री एक डेटा संरचना है जो बड़े डेटा पूल में सुरक्षित डेटा सत्यापन करने के लिए उपयोगी होती है। Bitcoin और Ethereum दोनों एक खुले नेटवर्क में डेटा को संग्रहीत और एक्सेस करते समय कई तकनीकी बाधाओं को हल करने के लिए मर्कल पेड़ों का उपयोग करते हैं.

किसी भी केंद्रीकृत नेटवर्क को डेटा को संग्रहीत करने और एक्सेस करने के बारे में चिंता करने की ज़रूरत नहीं है क्योंकि डेटा तक पहुँचने और संग्रहीत करने के लिए केवल एक ही स्रोत है। हालाँकि, समीकरण तब बदलता है जब विकेंद्रीकृत नेटवर्क होता है क्योंकि अब डेटा को सैकड़ों प्रतिभागी साथियों के बीच कॉपी करने की आवश्यकता होती है.

मर्कल पेड़ साथियों के बीच डेटा साझा करने और सत्यापित करने के लिए एक विश्वसनीय और कुशल तरीका प्रदान करके समस्या का समाधान करते हैं.

मर्कल ट्री उदाहरण

लेकिन, हम यहां मर्कल पेड़ों की चर्चा क्यों कर रहे हैं? मर्कल वृक्ष विभिन्न नोड्स और डेटा ब्लॉक को जोड़ने के लिए मुख्य कार्यक्षमता के रूप में हैश का उपयोग करते हैं.

मर्कल ट्री एक उल्टा पेड़ है जो पूरे लेनदेन सेट को संक्षेप में प्रस्तुत कर सकता है.

यदि आप मर्कल पेड़ों के बारे में और अधिक जानना चाहते हैं और यह क्रिप्टोग्राफी में हैशिंग का उपयोग कैसे करता है, तो हमारी विस्तृत मार्गदर्शिका देखें:

एक गाइड करने के लिए पेड़ पेड़। वहां, हमने चर्चा की कि बिटकॉइन और अन्य उपयोग के मामलों में मर्कल के पेड़ कैसे लगाए जाते हैं.

खनन प्रक्रिया

खनन प्रक्रिया भी हैशिंग का लाभ उठाती है। जब बिटकॉइन खनन की बात आती है, तो ब्लॉकचेन में एक नया ब्लॉक जोड़ा जाता है जब इसके लिए मांग होती है.

ब्लॉकचैन में ब्लॉक को जोड़ने के लिए एक विधि का पालन किया जाना चाहिए। नया ब्लॉक आने पर ब्लॉक की सामग्री के आधार पर एक हैश मान उत्पन्न होता है। साथ ही, यदि उत्पन्न हैश नेटवर्क कठिनाई से अधिक है, तो ब्लॉक को ब्लॉकचेन में जोड़ने की प्रक्रिया शुरू हो जाती है.

एक बार हो जाने के बाद, नेटवर्क के सभी साथियों ने नए ब्लॉक को जोड़ने की बात स्वीकार की.

लेकिन, यह शायद ही कभी नेटवर्क कठिनाई के रूप में मामला है, ज्यादातर मामलों में, उत्पन्न हैश की तुलना में हमेशा अधिक होता है। एक और पहलू है जो खनन प्रक्रिया में महत्वपूर्ण भूमिका निभाता है। यह गैर है.

गैर-ब्लॉक ब्लॉक के हैश में जोड़ा जाता है और एक मनमाना स्ट्रिंग है। एक बार हो जाने पर, समतल स्ट्रिंग को कठिनाई स्तर की तुलना में किया जाता है। यदि कठिनाई स्तर समतल स्ट्रिंग की तुलना में कम है, तो कठिनाई स्तर अधिक होने तक नॉन को बदल दिया जाता है.

प्रक्रिया को निम्नलिखित चरणों में संक्षेपित किया जा सकता है:

  • जब भी कोई नया ब्लॉक उत्पन्न होता है या लिया जाता है, तो नया हैश मान बनाने के लिए सामग्री को हैश किया जाता है,
  • एक नया नॉन मान उत्पन्न होता है और हैश में जोड़ा जाता है
  • नए संपर्क किए गए स्ट्रिंग पर हाशिंग प्रक्रिया होती है 
  • हैश के अंतिम मूल्य की तुलना तब नेटवर्क के कठिनाई स्तर से की जाती है
  •  यदि अंतिम हैश मान गैर से कम है, तो प्रक्रिया फिर से दोहराई जाती है। प्रक्रिया तभी रुकती है जब हैश मान नॉन से अधिक हो.
  • एक बार कठिनाई स्तर अधिक होने पर ब्लॉक श्रृंखला में शामिल हो जाता है
  • खनिक तब नए ब्लॉक की खान की जिम्मेदारी लेते हैं और पुरस्कारों को आपस में साझा करते हैं.

“हैश रेट” शब्द भी यहीं से आया है। हैश दर वह दर है जिस पर हैशिंग ऑपरेशन होते हैं। उच्चतर हैश दर का अर्थ है कि खनन प्रक्रिया में भाग लेने के लिए खनिकों को अधिक संगणना शक्ति की आवश्यकता होगी.

 

निष्कर्ष

यह हमें क्रिप्टोग्राफी में गहराई से गाइड में हमारे हैशिंग के अंत तक ले जाता है। हमने हैशिंग को विस्तार से कवर किया और इसके पीछे कोड का भी पता लगाया.

तो, आप इसके बारे में क्या सोचते हैं? नीचे टिप्पणी करें और हमें बताएं.

 

#सामान्य प्रश्न

क्रिप्टोग्राफी में हैशिंग क्या है?

क्रिप्टोग्राफी में, हैशिंग एक कुशल विधि का उपयोग करके डेटा को पाठ के एक अद्वितीय स्ट्रिंग में परिवर्तित करने की एक विधि है। इसके अलावा, डेटा या उसके आकार के प्रकार पर कोई सीमा नहीं है – हैशिंग उन सभी पर काम करते हैं.

क्रिप्टोग्राफी में हैशिंग का उपयोग कैसे किया जाता है?

क्रिप्टोग्राफी हैशिंग से हैश पासवर्ड का उपयोग करता है या विशिष्ट पहचान संख्या उत्पन्न करता है.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map