महत्वपूर्ण चेतावनी: इस लेख में दिखाया गया MD5() पासवर्ड स्टोरेज के लिए असुरक्षित और अप्रचलित है। आधुनिक एप्लिकेशन में bcrypt, Argon2, या PBKDF2 उपयोग करें।
पुराना तरीका (MD5 - उपयोग न करें)
CREATE TABLE UserNameAndPasswordDemo (
U_Id INT AUTO_INCREMENT PRIMARY KEY,
UserId VARCHAR(255) UNIQUE,
UserPassword VARCHAR(255)
);
INSERT INTO UserNameAndPasswordDemo (UserId, UserPassword)
VALUES ('john@example.com', MD5('john123'));
-- परिणाम: 6e0b7076126a29d5dfcbd54835387b7b (आसानी से क्रैक होने योग्य)
आधुनिक सुरक्षित तरीका: bcrypt (PHP उदाहरण)
prepare('INSERT INTO users (email, password) VALUES (?, ?)');
$stmt->execute([$email, $hash]);
// वेरिफाई करना
$stmt = $pdo->prepare('SELECT password FROM users WHERE email = ?');
$stmt->execute([$email]);
$stored_hash = $stmt->fetchColumn();
if (password_verify($password, $stored_hash)) {
// लॉगिन सफल
}
MySQL 8.0+ में बिल्ट-इन फंक्शन (सीमित उपयोग)
-- केवल डेमो/टेस्ट के लिए, प्रोडक्शन के लिए नहीं
SELECT SHA2('password', 256); -- SHA-256
-- एप्लिकेशन लेयर पर हैश करना बेहतर
सर्वोत्तम अभ्यास चेकलिस्ट
- ✅ कभी भी प्लेनटेक्स्ट पासवर्ड स्टोर न करें
- ✅ मजबूत एडाप्टिव हैशिंग उपयोग करें: Argon2id > bcrypt > PBKDF2
- ✅ प्रति-उपयोगकर्ता यूनिक सॉल्ट (bcrypt/Argon2 में अंतर्निहित)
- ✅ कॉस्ट फैक्टर/इटरेशन कॉन्फ़िगरेबल रखें
- ✅ TLS/SSL पर ही पासवर्ड ट्रांसमिट करें
- ✅ डेटाबेस उपयोगकर्ता को न्यूनतम आवश्यक अधिकार दें
- ✅ नियमित सुरक्षा ऑडिट करें
MySQL कॉलम परिभाषा
password_hash VARCHAR(255) NOT NULL -- bcrypt: 60 चर, Argon2: ~100+ चर