आपको वास्तव में उन पासवर्डों को हैश करना चाहिए, निम्न कोड का उपयोग करें
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `change_pass`(
in_Email VARCHAR(45),
in_PassOld VARCHAR(45),
in_PassNew VARCHAR(45)
)
BEGIN
DECLARE KnowsOldPassword INTEGER;
SELECT count(*) INTO KnowsOldPassword
FROM User
WHERE Email = in_Email AND passhash = SHA2(CONCAT(salt, in_PassOld),512);
IF (KnowsOldPassword > 0) THEN
UPDATE User
SET Passhash = SHA2(CONCAT(salt, inPassNew),512)
WHERE Email = in_Email;
END IF;
END $$
DELIMITER ;
salt
तालिका में एक अतिरिक्त फ़ील्ड है user
यह कमोबेश यादृच्छिक है, लेकिन इसे गुप्त रखने की आवश्यकता नहीं है। यह रेनबो टेबल
को हराने का काम करता है .
आप नमक को एक छोटी स्ट्रिंग चार(10) या यादृच्छिक डेटा पर सेट कर सकते हैं। जैसे
salt = ROUND(RAND(unix_timestamp(now())*9999999999);
आपको नमक को अपडेट करने की जरूरत नहीं है, बस इसे एक बार जेनरेट करें और फिर इसे स्टोर करें।
इस मुद्दे पर अधिक जानकारी के लिए देखें:
PHP और MySQL के साथ मेरे हैश को नमकीन करना
पुनर्प्राप्ति">बाद में प्लेनटेक्स्ट पुनर्प्राप्ति के लिए मुझे नैतिक रूप से उपयोगकर्ता पासवर्ड संग्रहण तक कैसे पहुंचना चाहिए?
आपके कोड पर एक टिप्पणी
IF(@PassOld == in_PassOld) THEN //incorrect
IF(@PassOld = in_PassOld) THEN //correct, SQL <> PHP :-)