MySQL MD5加密算法是一種常用的加密方式。在加密時,可以使用鹽(salt)來增加安全性,使得如果有人想要破解密文,需要擁有鹽的信息。下面我們將詳細介紹使用MySQL MD5帶鹽加密算法的方法。
首先,我們需要在MySQL數據庫中創建一個包含用戶信息的表,例如:
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(100) NOT NULL, `salt` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
其中,password字段是用來存放加密后的密碼,salt是用來存放鹽的信息。
接下來,我們需要定義一個用來生成隨機字符串的函數,例如:
DELIMITER $$ CREATE FUNCTION `rand_string`(len INT) RETURNS varchar(100) BEGIN DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; DECLARE strlen INT DEFAULT LENGTH(chars_str); DECLARE random_str VARCHAR(100) DEFAULT ''; DECLARE i INT DEFAULT 0; WHILE i< len DO SET random_str = CONCAT(random_str, SUBSTR(chars_str, FLOOR(1+RAND()*strlen), 1)); SET i = i + 1; END WHILE; RETURN random_str; END$$ DELIMITER ;
此函數可以生成一個指定長度的隨機字符串。
接著,在注冊時,我們需要生成一個隨機字符串,并將其存放到用戶的鹽中。代碼如下:
$salt = rand_string(32); $password = md5($password . $salt); $sql = "INSERT INTO user (username, password, salt) VALUES ('$username', '$password', '$salt')";
其中,$password是用戶輸入的原始密碼。
在對密碼進行登錄校驗時,我們需要先查詢得到用戶的鹽,然后使用鹽對原始密碼進行加密,最后將加密后的密碼和數據庫中存儲的密碼進行比對。代碼如下:
$row = mysql_fetch_assoc(mysql_query("SELECT * FROM user WHERE username = '$username'")); $salt = $row['salt']; $password = md5($password . $salt); if ($password == $row['password']) { // 登錄成功 } else { // 登錄失敗 }
這樣,我們就完成了使用MySQL MD5帶鹽加密算法的示例代碼。通過加入鹽,可以有效增加密碼的安全性,保護用戶隱私。