Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में MD5 पासवर्ड को SHA256 में बदलना

SHA2() फंक्शन का उपयोग

MySQL में SHA2(str, hash_length) फंक्शन SHA-2 परिवार के हैश फंक्शन्स (SHA-224, SHA-256, SHA-384, SHA-512) की गणना करता है। मौजूदा MD5 हैश को SHA-256 में बदलने के लिए उपयोग करें।

उदाहरण: टेबल बनाना और MD5 पासवर्ड इन्सर्ट करना

mysql> CREATE TABLE DemoTable818(UserPassword TEXT);
Query OK, 0 rows affected (0.51 sec)

MD5 हैश इन्सर्ट करना

mysql> INSERT INTO DemoTable818 VALUES(MD5('John_123')), (MD5('999Carol@22'));
Query OK, 2 rows affected (...)

संग्रहीत MD5 हैश देखना

mysql> SELECT * FROM DemoTable818;
+----------------------------------+
| UserPassword                     |
+----------------------------------+
| 47c7d0987db4e59e2264ce9fefce4977 |
| 950aa70edd5b686a807b3bfffdf2248c |
+----------------------------------+
2 rows in set (0.00 sec)

MD5 से SHA-256 में बदलने की क्वेरी

mysql> UPDATE DemoTable818 SET UserPassword = SHA2(UserPassword, 256);
Query OK, 2 rows affected (0.19 sec)
Rows matched: 2  Changed: 2  Warnings: 0

बदले गए SHA-256 हैश देखना

mysql> SELECT * FROM DemoTable818;
+------------------------------------------------------------------+
| UserPassword                                                     |
+------------------------------------------------------------------+
| 8b68c46294a9ccb2449324c24fe774f95b7c14e4b56fc51c7f8e6c5b01c7020f |
| 9cc80741546051ae3de7d31246327968c98af3c65125376acb7b49a0760d42a3 |
+------------------------------------------------------------------+
2 rows in set (0.00 sec)

महत्वपूर्ण सुरक्षा नोट

⚠️ चेतावनी: यह तरीका सुरक्षित नहीं है!
मौजूदा MD5 हैश को SHA-256 में हैश करना (SHA2(MD5(password), 256)) मूल पासवर्ड को SHA-256 में हैश करने (SHA2(password, 256)) के बराबर नहीं है। यह केवल हैश को "री-हैश" करता है।

सही पासवर्ड माइग्रेशन रणनीति

  1. अगले लॉगिन पर री-हैश: जब यूजर लॉगिन करे, MD5 वेरिफाई करें, फिर मूल पासवर्ड से नया SHA-256/बीक्रिप्ट/आर्गन2 हैश बनाएं और स्टोर करें
  2. डबल हैश लेयर: नया हैश = SHA2(CONCAT('salt', MD5(password)), 256) - लेकिन मूल पासवर्ड के बिना असंभव
  3. पासवर्ड रीसेट बाध्य करें: सभी यूजर्स को पासवर्ड रीसेट करने के लिए मजबूर करें

आधुनिक पासवर्ड हैशिंग (अनुशंसित)

-- MySQL 8.0+ में वैधता जांच के लिए (हैशिंग एप्लिकेशन लेयर पर करें)
-- बीक्रिप्ट/आर्गन2 के लिए एप्लिकेशन कोड (PHP, Python, Node.js) का उपयोग करें

-- MySQL में केवल वेरिफिकेशन के लिए (यदि हैश पहले से स्टोर है)
SELECT UserPassword = SHA2('input_password', 256) FROM users WHERE username = '...';

SHA2 वेरिएंट्स

SHA2(str, 224)  -- SHA-224 (56 हेक्स कैरेक्टर)
SHA2(str, 256)  -- SHA-256 (64 हेक्स कैरेक्टर) 
SHA2(str, 384)  -- SHA-384 (96 हेक्स कैरेक्टर)
SHA2(str, 512)  -- SHA-512 (128 हेक्स कैरेक्टर)

साल्ट जोड़ना (आवश्यक)

-- एप्लिकेशन लेयर पर
hash = SHA2(CONCAT(salt, password), 256)
-- सॉल्ट को अलग कॉलम में स्टोर करें
  1. - क्या MySQL तालिका में 'year' को कॉलम नाम के रूप में उपयोग कर सकते हैं?

    MySQL में year को कॉलम नाम के रूप में उपयोग करना YEAR MySQL में एक आरक्षित शब्द (reserved word) है क्योंकि यह एक फ़ंक्शन नाम है (YEAR(date))। हालांकि, इसे बैकटिक (`) में लपेटकर कॉलम नाम के रूप में उपयोग किया जा सकता है। व्यावहारिक उदाहरण तालिका बनाना (बैकटिक के साथ) CREATE TABLE DemoTable ( `

  1. - क्या हम MySQL टेबल के लिए 'user' शब्द का उपयोग कर सकते हैं?

    उत्तर नहीं, आप MySQL टेबल के लिए सीधे user शब्द का उपयोग नहीं कर सकते क्योंकि यह MySQL में एक आरक्षित शब्द (reserved word) है। MySQL की सिस्टम टेबल mysql.user मौजूद है। समाधान बहुवचन उपयोग करें: users (सबसे आम और अनुशंसित) बैकटिक्स उपयोग करें: `user` (काम करता है लेकिन भ्रमित कर सकता है) वर्णनात्म

  1. - MySQL 8.0 में 'rank' आरक्षित शब्द: कॉलम नाम के लिए बैकटिक्स आवश्यक

    MySQL 8.0.2 से RANK एक आरक्षित शब्द (reserved word) है क्योंकि विंडो फ़ंक्शन RANK() जोड़ा गया। इसे कॉलम नाम के रूप में उपयोग करने के लिए बैकटिक्स (`) आवश्यक हैं। समस्या ); ERROR 1064 (42000): You have an error in your SQL syntax near rank int at line 5 समाधान: बैकटिक्स उपयोग करें ); Query OK डे