हैश, सॉल्ट और आपकी सुरक्षा: 2025 में यह क्यों ज़रूरी है?
\n\nसोचिए: आपने एक शानदार वेबसाइट बनाई, सब कुछ काम कर रहा है, यूज़र रजिस्टर कर रहे हैं। लेकिन एक दिन डेटाबेस लीक हो जाता है। हैकर्स क्या देखेंगे? अगर आप पासवर्ड को सादे टेक्स्ट में स्टोर कर रहे हैं — यह आपदा है। अगर आप पुराने md5 का उपयोग कर रहे हैं — यह लगभग वैसा ही है। लेकिन अगर आपने secure hash and salt लगाया है — हैकर्स को सिर्फ बेकार अक्षर दिखेंगे। 2025 में यह सिर्फ एक सुझाव नहीं, बल्कि सुरक्षा का मानक है।
\n\nइस लेख में हम जानेंगे कि PHP में पासवर्ड को सही तरीके से कैसे हैश करें, आधुनिक एल्गोरिदम, सॉल्ट और सर्वश्रेष्ठ प्रैक्टिसेज के साथ। आप जानेंगे कि पुराने तरीके क्यों खतरनाक हैं, और सुरक्षित पासवर्ड स्टोरेज पर सिर्फ 10 मिनट में कैसे स्विच करें।
\n\nmd5 और sha1 क्यों खतरनाक हैं?
\n\nकई नए डेवलपर एक ही गलती करते हैं: md5($password) या sha1($password) का उपयोग करना। 2025 में यह सिर्फ खराब प्रैक्टिस नहीं, बल्कि सुरक्षा छेद का सीधा रास्ता है। क्यों?
- \n
- गणना की गति। MD5 और SHA1 गति के लिए बने हैं, सुरक्षा के लिए नहीं। आधुनिक GPU प्रति सेकंड अरबों हैश क्रैक कर सकते हैं। \n
- सॉल्ट की कमी। अगर दो यूज़र का पासवर्ड एक जैसा है, तो उनके हैश भी एक जैसे होंगे। इससे रेनबो टेबल अटैक आसान हो जाता है। \n
- कोलिज़न। MD5 में प्रैक्टिकल कोलिज़न पाए गए हैं — दो अलग-अलग इनपुट एक ही हैश देते हैं। \n
शुक्र है, PHP में बिल्ट-इन फंक्शन हैं जो ये सारी समस्याएं हल करते हैं। और इसके लिए किसी थर्ड-पार्टी लाइब्रेरी की ज़रूरत नहीं है।
\n\npassword_hash और password_verify: आपका गुप्त हथियार
\n\nPHP 5.5.0 से, भाषा में दो जादुई फंक्शन आए: password_hash() और password_verify()। ये अपने आप सॉल्ट जनरेट करते हैं, क्रिप्टोग्राफिक रूप से मजबूत एल्गोरिदम का उपयोग करते हैं, और टाइमिंग अटैक से बचाते हैं।
सबसे आसान उपयोग का उदाहरण:
\n\n// पासवर्ड हैश करना\n$password = "MySuperSecureP@ssw0rd!";\n$hash = password_hash($password, PASSWORD_DEFAULT);\necho $hash; // $2y$10$...\n\n\nयहाँ क्या हुआ? password_hash फंक्शन ने:
- \n
- एक रैंडम सॉल्ट जनरेट किया \n
- सबसे अच्छा एल्गोरिदम चुना (डिफ़ॉल्ट रूप से bcrypt) \n
- हैश की गणना की \n
- एक स्ट्रिंग लौटाई जिसमें हैश, सॉल्ट और एल्गोरिदम की जानकारी शामिल है \n
पासवर्ड चेक करना भी उतना ही आसान है:
\n\n// पासवर्ड की जाँच\n$inputPassword = "MySuperSecureP@ssw0rd!";\nif (password_verify($inputPassword, $hash)) {\n echo "पासवर्ड सही है!";\n} else {\n echo "पासवर्ड गलत है।";\n}\n\n\nध्यान दें: आपको सॉल्ट को अलग से स्टोर करने की ज़रूरत नहीं है। यह पहले से हैश में ही एम्बेडेड है। यही है secure hash and salt असल में।
\n\n2025 में कौन सा एल्गोरिदम चुनें?
\n\nडिफ़ॉल्ट रूप से password_hash bcrypt का उपयोग करता है। यह ज़्यादातर प्रोजेक्ट्स के लिए बढ़िया विकल्प है। लेकिन हमारे पास और भी विकल्प हैं:
| एल्गोरिदम | \nकॉन्स्टेंट | \nसुझाव | \n
|---|---|---|
| Bcrypt | \nPASSWORD_BCRYPT | \n बढ़िया विकल्प, हर जगह सपोर्टेड | \n
| Argon2i | \nPASSWORD_ARGON2I | \n साइड-चैनल अटैक से सुरक्षित | \n
| Argon2id | \nPASSWORD_ARGON2ID | \n 2025 में सबसे अच्छा विकल्प | \n
Argon2id — PHC (Password Hashing Competition) का विजेता है। यह GPU अटैक और टाइमिंग अटैक दोनों से सुरक्षित है। अगर आपका PHP Argon2 सपोर्ट के साथ बना है (PHP 8.x में यह पहले से मानक है), तो इसका उपयोग करें।
\n\nहैशिंग की लागत (कॉस्ट) सेट करना
\n\nSecure hash and salt की एक मुख्य बात है — हैशिंग को धीमा बनाना ताकि