Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
🔴 Advanced  ·  Lesson 33

Password Hashing

Plain passwords कभी न रखें

Login security का सबसे ज़रूरी नियम: password को कभी plain text में store न करें। अगर आपका database कभी चोरी हो, plain passwords सीधे attacker के हाथ लग जाते हैं। इसके बजाय आप hash store करते हैं — एक scrambled, one-way रूप — PHP के built-in functions से, जो आसान भी हैं और बहुत मज़बूत भी।

⚠️ Hash store कीजिए, असली password कभी नहीं। आप hash के ख़िलाफ़ verify करते हैं; उसे वापस नहीं बदलते।

Password hash करना

जब user sign up करे, save करने से पहले उसका password hash कीजिए।

<?php
  $password = "mySecret123";
  $hash = password_hash($password, PASSWORD_DEFAULT);
  echo $hash;   // एक लंबा scrambled string
?>
$2y$10$Ku3...long...hash

password_hash मज़बूत algorithm (default bcrypt) इस्तेमाल करता है और अपने-आप random salt जोड़ता है। यह hash अपनी users table में save कीजिए — असली password नहीं।

Login पर verify करना

Login पर, डाले गए password की store hash से तुलना कीजिए।

<?php
  $entered = "mySecret123";
  $storedHash = "$2y$10$Ku3...";   // database से

  if (password_verify($entered, $storedHash)) {
      echo "Login success";
  } else {
      echo "Wrong password";
  }
?>
Login success

password_verify डाले गए password को hash से जाँचता है और true या false देता है। आप hash कभी decrypt नहीं करते — सिर्फ़ उसके ख़िलाफ़ verify करते हैं।

Hashing सुरक्षित क्यों है

Hash one-way होता है: password को hash में बदल सकते हैं, पर hash को वापस password में नहीं। तो attackers आपका database चुरा भी लें, उन्हें सिर्फ़ scrambled hashes मिलते हैं, इस्तेमाल योग्य passwords नहीं। automatic random salt का मतलब भी है कि एक ही password वाले दो users को अलग hashes मिलते हैं, precomputed attack tables को नाकाम करके।

Hashes अपडेट रखना

<?php
  if (password_needs_rehash($storedHash, PASSWORD_DEFAULT)) {
      $newHash = password_hash($entered, PASSWORD_DEFAULT);
      // $newHash database में save कीजिए
  }
?>

जैसे-जैसे PHP अपना default algorithm सुधारती है, password_needs_rehash आपको अगले सफल login पर पुराने hashes अपने-आप upgrade करने देता है — बिना user मेहनत के security current रखकर।

आम गलतियाँ

  • Plain passwords store करना। Classic, ख़तरनाक गलती — हमेशा hash कीजिए।
  • md5 या sha1 जैसे पुराने functions इस्तेमाल करना। ये passwords के लिए सुरक्षित नहीं; password_hash इस्तेमाल कीजिए।
  • Hash को decrypt करने की कोशिश। Hashes one-way हैं — इसके बजाय password_verify से verify कीजिए।
  • अपना कमज़ोर salt जोड़ना। ज़रूरत नहीं — password_hash आपके लिए salt करता है।

सारांश

  • Plain passwords कभी store न करें — हमेशा hash store कीजिए।
  • password_hash($pw, PASSWORD_DEFAULT) से hash कीजिए।
  • Logins को password_verify($entered, $hash) से जाँचिए।
  • Hashes one-way और अपने-आप salted हैं — बहुत सुरक्षित।
  • Hashes current रखने को password_needs_rehash इस्तेमाल कीजिए।

आगे, पूरा flow बनाइए login और registration में, या database सुरक्षित कीजिए prepared statements से।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

passwords को plain text में कभी क्यों न रखूँ?
अगर आपका database कभी leak हो, plain passwords तुरंत उजागर हो जाते हैं — और चूँकि लोग passwords दोबारा इस्तेमाल करते हैं, उनके दूसरे accounts भी ख़तरे में। Hashing password को scramble कर देता है ताकि leak हुआ database भी उसे न बताए।
password_hash क्या करता है?
password_hash($password, PASSWORD_DEFAULT) एक मज़बूत algorithm (अभी bcrypt) से password को लंबे, scrambled hash में बदल देता है। आप यह hash store करते हैं, कभी असली password नहीं।
Login पर password कैसे जाँचें?
password_verify($entered, $storedHash) इस्तेमाल कीजिए। यह true देता है अगर डाला गया password store hash से मेल खाए, वरना false। आप hash को कभी "decrypt" नहीं करते — उसके ख़िलाफ़ verify करते हैं।
क्या hash को वापस password में बदल सकते हैं?
नहीं। अच्छा hash one-way होता है — इसे वापस असली password में नहीं बदल सकते। इसीलिए यह सुरक्षित है: आप (या attacker) भी store hash से असली password नहीं पढ़ सकते।
क्या मुझे अपना salt जोड़ना पड़ता है?
नहीं। password_hash हर hash में अपने-आप एक unique random salt जोड़ता है, तो एक ही password वाले दो users को अलग hashes मिलते हैं। salt आप खुद संभालते नहीं।
← Back to PHP Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicPagination आपकी प्रगति: 33 / 50 (66%) · Lesson 34 / 50 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें