MySQL密码明文加密是指将用户输入的密码以明文形式存储在数据库中,这种做法存在极大的安全隐患。为了提高安全性,通常会对密码进行加密处理,常见的加密方式包括哈希算法(如MD5、SHA-1、SHA-256等)和加盐哈希(salted hash)。
原因:明文存储密码存在极大的安全隐患,一旦数据库被攻破,攻击者可以直接获取用户的原始密码,进而可能导致用户的其他账户也被攻破。
解决方法:使用哈希算法或加盐哈希对密码进行加密处理。
解决方法:
-- 创建用户表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
salt VARCHAR(255) NOT NULL
);
-- 注册用户时生成盐值并加密密码
DELIMITER //
CREATE PROCEDURE RegisterUser(IN p_username VARCHAR(255), IN p_password VARCHAR(255))
BEGIN
DECLARE v_salt VARCHAR(255);
SET v_salt = SUBSTRING(MD5(RAND()), 1, 16); -- 生成一个16位的盐值
INSERT INTO users (username, password_hash, salt)
VALUES (p_username, SHA2(CONCAT(p_password, v_salt), 256), v_salt);
END //
DELIMITER ;
-- 用户登录时验证密码
DELIMITER //
CREATE PROCEDURE LoginUser(IN p_username VARCHAR(255), IN p_password VARCHAR(255))
BEGIN
DECLARE v_salt VARCHAR(255);
DECLARE v_password_hash VARCHAR(255);
SELECT salt, password_hash INTO v_salt, v_password_hash FROM users WHERE username = p_username;
IF v_password_hash = SHA2(CONCAT(p_password, v_salt), 256) THEN
SELECT 'Login successful';
ELSE
SELECT 'Invalid username or password';
END IF;
END //
DELIMITER ;通过以上方法,可以有效提高MySQL密码存储的安全性,防止密码泄露带来的风险。
没有搜到相关的文章