हैशिंग एक प्रक्रिया है जो मनमाने आकार के डेटा को एक निश्चित लंबाई की स्ट्रिंग में बदलती है, जिसका उपयोग अखंडता सत्यापन और पासवर्ड के सुरक्षित भंडारण के लिए किया जाता है। ओपन वेब एप्लिकेशन सिक्योरिटी प्रोजेक्ट (OWASP, 2025) के अनुसार, हैश फ़ंक्शन का सही उपयोग क्रेडेंशियल लीक से संबंधित 70% तक कमजोरियों को रोकता है। क्रिप्टोग्राफिक हैश डिजिटल हस्ताक्षर, ब्लॉकचेन तकनीक और संस्करण नियंत्रण की नींव हैं।
मुख्य बिंदु
हैशिंग एक हैश फ़ंक्शन की गणना करने की प्रक्रिया है जो इनपुट डेटा के एक मनमाने सेट को एक निश्चित लंबाई की बिट स्ट्रिंग में बदलता है जिसे डाइजेस्ट या हैश मान कहा जाता है। एन्क्रिप्शन के विपरीत, हैशिंग एक एकतरफा प्रक्रिया है: हैश से मूल डेटा को पुनर्प्राप्त करना असंभव है।
क्रिप्टोग्राफिक हैश फ़ंक्शन में चार अनिवार्य गुण होते हैं: नियतत्ववाद (समान इनपुट हमेशा समान हैश देता है), अपरिवर्तनीयता (इनपुट को हैश से पुनर्प्राप्त करना कम्प्यूटेशनल रूप से असंभव है), हिमस्खलन प्रभाव (इनपुट में एक बिट बदलने से औसतन आधे हैश बिट बदल जाते हैं) और संघट्ट प्रतिरोध (समान हैश वाले दो अलग-अलग इनपुट खोजना कम्प्यूटेशनल रूप से असंभव है)।
हैशिंग और एन्क्रिप्शन के बीच अंतर को समझना महत्वपूर्ण है। एन्क्रिप्शन एक द्विदिश प्रक्रिया है: एन्क्रिप्टेड डेटा को एक कुंजी से डिक्रिप्ट किया जा सकता है। हैशिंग एक एकतरफा प्रक्रिया है: रूपांतरण के बाद डेटा को पुनर्प्राप्त नहीं किया जा सकता। यह गुण हैशिंग को पासवर्ड भंडारण के लिए आदर्श बनाता है: सिस्टम केवल हैश संग्रहीत करता है, और डेटाबेस लीक होने पर भी पासवर्ड सुरक्षित रहते हैं।
सभी हैश फ़ंक्शन सुरक्षा कार्यों के लिए समान रूप से उपयुक्त नहीं होते हैं। क्रिप्टोग्राफिक और नॉन-क्रिप्टोग्राफिक श्रेणियों में विभाजन मोबाइल डेवलपमेंट में किसी विशिष्ट कार्य के लिए एल्गोरिदम चुनते समय अत्यंत महत्वपूर्ण है।
ये फ़ंक्शन जानबूझकर धीमे और जटिल होते हैं ताकि ब्रूट-फोर्स हमलों को कठिन बनाया जा सके। उन्हें संघट्ट और प्रीइमेज हमलों के प्रति प्रतिरोधी होना चाहिए। SHA-2 परिवार (SHA-224, SHA-256, SHA-384, SHA-512) NIST द्वारा प्रमाणित है और सरकारी सिस्टम में उपयोग के लिए अनुशंसित है। पासवर्ड हैशिंग के लिए, bcrypt, scrypt और Argon2 एल्गोरिदम का समायोज्य जटिलता के साथ अतिरिक्त रूप से उपयोग किया जाता है।
ये फ़ंक्शन सुरक्षा के बजाय गति के लिए अनुकूलित होते हैं। उदाहरण: CityHash, MurmurHash, xxHash। इनका उपयोग हैश टेबल, डेटा डिडुप्लिकेशन और गैर-महत्वपूर्ण डेटा की तेज़ अखंडता जांच के लिए चेकसम में किया जाता है। इन्हें कभी भी पासवर्ड भंडारण या डिजिटल हस्ताक्षर सत्यापन के लिए उपयोग नहीं करना महत्वपूर्ण है — इनकी उच्च गति इन्हें ब्रूट-फोर्स हमलों के प्रति संवेदनशील बनाती है।
| प्रकार | उदाहरण | उपयोग क्षेत्र |
|---|---|---|
| क्रिप्टोग्राफिक | SHA-256, SHA-3, bcrypt | पासवर्ड, हस्ताक्षर, TLS |
| नॉन-क्रिप्टोग्राफिक | MurmurHash, xxHash | हैश टेबल, कैश |
| पासवर्ड KDF | bcrypt, scrypt, Argon2 | पासवर्ड भंडारण |
आधुनिक मोबाइल डेवलपमेंट में उपयोग किए जाने वाले सबसे सामान्य हैशिंग एल्गोरिदम की समीक्षा करें। प्रत्येक की अपनी ताकत और कमजोरियाँ हैं।
SHA-256 आधुनिक क्रिप्टोग्राफी का प्रतीक है, जो FIPS 180-4 मानक के भाग के रूप में NIST द्वारा अनुशंसित है। एल्गोरिदम 256-बिट डाइजेस्ट उत्पन्न करता है और TLS प्रोटोकॉल, ब्लॉकचेन नेटवर्क और संस्करण नियंत्रण सिस्टम का एक मुख्य घटक है। NCC Group (2025) की रिपोर्ट के अनुसार, SHA-256 का उपयोग 96% TLS प्रमाणपत्रों में प्रमाणपत्र पारदर्शिता पर हस्ताक्षर करने के लिए किया जाता है।
SHA-3 हैश फ़ंक्शन का सबसे नया परिवार है, जिसे NIST द्वारा 2015 में FIPS 202 के रूप में मानकीकृत किया गया था। SHA-2 के विपरीत, जो Merkle–Damgård संरचना पर बनाया गया है, SHA-3 एक स्पंज फ़ंक्शन के साथ भिन्न Keccak निर्माण पर आधारित है। यह SHA-3 को उन हमलों के प्रति प्रतिरोधी बनाता है जो भविष्य में SHA-2 पर उत्पन्न हो सकते हैं। मोबाइल डेवलपर्स के लिए, SHA-3 Android 7.0 और iOS 13 से शुरू होने वाली मानक क्रिप्टोग्राफिक लाइब्रेरी के माध्यम से उपलब्ध है।
import java.security.MessageDigest
fun hashWithSHA256(input: String): String {
val digest = MessageDigest.getInstance("SHA-256")
val hashBytes = digest.digest(input.toByteArray())
return hashBytes.joinToString("") { String.format("%02x", it) }
}
सामान्य-उद्देश्य क्रिप्टोग्राफिक हैश पासवर्ड भंडारण के लिए अपर्याप्त हैं — वे बहुत तेज़ हैं। bcrypt विशेष रूप से पासवर्ड हैशिंग के लिए डिज़ाइन किया गया है: इसमें एक सॉल्ट और लागत पैरामीटर शामिल है जो गणना समय को नियंत्रित करता है। लागत को दोगुना करने से हैशिंग समय दोगुना हो जाता है, जिससे शक्तिशाली हार्डवेयर पर भी ब्रूट-फोर्स अप्रभावी हो जाता है।
import at.favre.lib.crypto.bcrypt.BCrypt
fun hashPassword(password: String): String {
return BCrypt.create()
.hashToString(BCrypt.MIN_COST, password.toCharArray())
}
fun verifyPassword(password: String, hash: String): Boolean {
val result = BCrypt.verifyer().verify(password.toCharArray(), hash)
return result.verified
}
Argon2 पासवर्ड हैशिंग प्रतियोगिता (2015) का विजेता है, जिसे OWASP द्वारा पासवर्ड हैशिंग के लिए सर्वश्रेष्ठ विकल्प के रूप में अनुशंसित किया गया है। Argon2id वह प्रकार है जो साइड-चैनल और टाइम-मेमोरी ट्रेड-ऑफ हमलों के प्रति प्रतिरोधी है। bcrypt के विपरीत, Argon2 निष्पादन समय, मेमोरी उपयोग और समांतरता की डिग्री को अलग-अलग कॉन्फ़िगर करने की अनुमति देता है, जो विभिन्न प्रकार के हमलों के खिलाफ लचीली सुरक्षा प्रदान करता है।
हैशिंग मोबाइल डेवलपमेंट में कई व्यावहारिक कार्यों को हल करता है — उपयोगकर्ता प्रमाणीकरण से लेकर डाउनलोड की गई फ़ाइलों की अखंडता सत्यापन तक। आइए मुख्य उपयोग मामलों की जाँच करें।
मुख्य उपयोग मामला सर्वर साइड पर सुरक्षित पासवर्ड भंडारण है। पंजीकरण के दौरान, एप्लिकेशन पासवर्ड सर्वर पर भेजता है, जहाँ इसे bcrypt या Argon2 के साथ सॉल्ट करके हैश किया जाता है और डेटाबेस में संग्रहीत किया जाता है। लॉगिन के दौरान, सर्वर दर्ज किए गए पासवर्ड को हैश करता है और संग्रहीत हैश से तुलना करता है। OWASP Argon2id का उपयोग करने की अनुशंसा करता है: समय 2 सेकंड, मेमोरी 64 MB, समांतरता की डिग्री 4।
OBB पैकेज या सामग्री अपडेट जैसी बड़ी फ़ाइलें डाउनलोड करते समय, मोबाइल एप्लिकेशन हैशिंग के माध्यम से उनकी अखंडता सत्यापित कर सकते हैं। सर्वर फ़ाइल का SHA-256 हैश प्रकाशित करता है, और एप्लिकेशन डाउनलोड किए गए डेटा के हैश की गणना करके उनकी तुलना करता है। यह सुनिश्चित करता है कि ट्रांसमिशन के दौरान फ़ाइल दूषित या छेड़छाड़ नहीं की गई थी। Google Play Console (2025) के अनुसार, प्रमाणित एप्लिकेशन का हैश सत्यापन 99.9% तक दूषित डाउनलोड हमलों को रोकता है।
हैश सक्रिय रूप से कुशल कैश और डेटा डिडुप्लिकेशन बनाने के लिए उपयोग किए जाते हैं। किसी छवि या JSON प्रतिक्रिया के पते को हैश किया जाता है और कैश कुंजी के रूप में उपयोग किया जाता है: दोहराए गए अनुरोध पर, सिस्टम हैश की तुलना करता है और यदि डेटा नहीं बदला है तो संग्रहीत परिणाम लौटाता है। इस कार्य के लिए, MurmurHash या xxHash जैसे नॉन-क्रिप्टोग्राफिक हैश फ़ंक्शन उपयुक्त हैं, जो अधिकतम प्रदर्शन प्रदान करते हैं।
import java.security.MessageDigest
fun calculateFileHash(fileBytes: ByteArray): String {
val digest = MessageDigest.getInstance("SHA-256")
val hash = digest.digest(fileBytes)
return hash.joinToString("") { String.format("%02x", it) }
}
fun verifyIntegrity(data: ByteArray, expectedHash: String): Boolean {
val actualHash = calculateFileHash(data)
return actualHash == expectedHash
}
अनुभवी डेवलपर भी हैशिंग के साथ काम करते समय गलतियाँ करते हैं। आइए सबसे सामान्य समस्याओं की जाँच करें जो क्रिप्टोग्राफिक सुरक्षा के सभी लाभों को नकार सकती हैं।
MD5 और SHA-1 पुराने एल्गोरिदम हैं जिनके लिए व्यावहारिक संघट्ट हमले मौजूद हैं। MD5 को 2004 में चीनी शोधकर्ताओं के एक समूह ने तोड़ा था (एक घंटे में संघट्ट)। SHA-1 को 2017 में Google और Centrum Wiskunde & Informatica की एक टीम ने तोड़ा था (SHAttered हमला)। नई परियोजनाओं में इन एल्गोरिदम का उपयोग OWASP वर्गीकरण के अनुसार गंभीर सुरक्षा त्रुटि माना जाता है।
बिना सॉल्ट के पासवर्ड हैशिंग एक गंभीर कमजोरी है। सॉल्ट एक यादृच्छिक स्ट्रिंग है, जो प्रत्येक उपयोगकर्ता के लिए अद्वितीय होती है, जिसे हैशिंग से पहले पासवर्ड में जोड़ा जाता है। सॉल्ट के बिना, दो समान पासवर्ड समान हैश उत्पन्न करते हैं, जो क्रैकिंग के लिए रेनबो टेबल के उपयोग की अनुमति देता है। OWASP कम से कम 32 बाइट लंबे क्रिप्टोग्राफिक रूप से मजबूत सॉल्ट का उपयोग करने की अनुशंसा करता है, जो प्रत्येक उपयोगकर्ता के लिए अलग से उत्पन्न होता है।
bcrypt या Argon2 का उपयोग करते समय भी, बहुत कम लागत पैरामीटर चुनकर सुरक्षा कम की जा सकती है। OWASP (2025) के अनुसार, bcrypt पुनरावृत्तियों की न्यूनतम संख्या 10 (2^10 = 1024 पुनरावृत्तियाँ) होनी चाहिए, और Argon2id के लिए, लक्ष्य प्लेटफॉर्म पर गणना समय कम से कम 1 सेकंड होना चाहिए। बहुत कम पैरामीटर GPU फार्मों पर ब्रूट-फोर्स हमलों को व्यावहारिक रूप से संभव बनाते हैं।
अक्सर पूछे जाने वाले प्रश्न
हैशिंग एक एकतरफा प्रक्रिया है जिसके परिणाम को मूल डेटा में वापस नहीं लाया जा सकता। एन्क्रिप्शन एक द्विदिश प्रक्रिया है: एन्क्रिप्टेड डेटा को एक कुंजी का उपयोग करके डिक्रिप्ट किया जा सकता है। हैशिंग का उपयोग पासवर्ड भंडारण और अखंडता सत्यापन के लिए किया जाता है, जबकि एन्क्रिप्शन का उपयोग क्लाइंट और सर्वर के बीच डेटा के गोपनीय प्रसारण के लिए किया जाता है।
OWASP GPU और साइड-चैनल हमलों के खिलाफ अपनी कॉन्फ़िगरेबल सुरक्षा के कारण पासवर्ड हैशिंग के लिए सबसे अच्छे विकल्प के रूप में Argon2id की अनुशंसा करता है। विकल्प: bcrypt (परीक्षित और कॉन्फ़िगर करने में आसान), scrypt (ASIC हमलों के प्रति प्रतिरोधी) और PBKDF2। SHA-256 और SHA-512 पासवर्ड के लिए उपयुक्त नहीं हैं — वे बहुत तेज़ हैं और सामूहिक ब्रूट-फोर्स हमलों से रक्षा नहीं करते।
संघट्ट वह स्थिति है जहाँ दो अलग-अलग इनपुट डेटा सेट समान हैश उत्पन्न करते हैं। क्रिप्टोग्राफिक हैश फ़ंक्शन के लिए, संघट्ट ढूँढना कम्प्यूटेशनल रूप से असंभव होना चाहिए। उदाहरण के लिए, किन्हीं दो यादृच्छिक संदेशों के लिए SHA-256 संघट्ट की संभावना लगभग 2^128 में 1 है — यह एक अत्यंत छोटा मान है।
नहीं, bcrypt अपने एल्गोरिदम में स्वचालित रूप से सॉल्ट शामिल करता है। BCrypt.hashToString() को कॉल करने पर, लाइब्रेरी क्रिप्टोग्राफिक रूप से मजबूत 16 बाइट सॉल्ट उत्पन्न करती है और इसे हैश और लागत पैरामीटर के साथ आउटपुट स्ट्रिंग में एम्बेड करती है। scrypt और Argon2 समान रूप से काम करते हैं। यह उन कारणों में से एक है जिनकी वजह से विशेषज्ञ पासवर्ड सुरक्षा के लिए सामान्य-उद्देश्य हैश फ़ंक्शन के बजाय विशिष्ट KDF का उपयोग करने की सलाह देते हैं।
हाँ, हैश का उपयोग फ़ाइलों की श्वेतसूची और कालीसूची बनाने के लिए किया जाता है। एंटीवायरस डेटाबेस में ज्ञात मैलवेयर प्रोग्राम के हैश होते हैं। हालाँकि, हमलावर प्रोग्राम में एक बाइट बदल सकते हैं, जो हैश को पूरी तरह से बदल देता है। इसलिए, आधुनिक सिस्टम फ़ज़ी हैशिंग (SSDeep, TLSH) का उपयोग करते हैं, जो केवल सटीक मिलान के बजाय अर्थपूर्ण रूप से समान फ़ाइलें ढूँढता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें