Mysql SHA1&x2B;SQL中的盐哈希
我编写了以下程序:Mysql SHA1&x2B;SQL中的盐哈希,mysql,sql,random,hash,Mysql,Sql,Random,Hash,我编写了以下程序: delimiter ;; CREATE PROCEDURE hashPassword() BEGIN DECLARE n INT DEFAULT 0; DECLARE i INT DEFAULT 0; SELECT COUNT(*) FROM users INTO n; SET i=0; WHILE i<n DO SET @salt := FLOOR(RAND() * 0xFFFFFFFF); SELECT password FROM users L
delimiter ;;
CREATE PROCEDURE hashPassword()
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
SELECT COUNT(*) FROM users INTO n;
SET i=0;
WHILE i<n DO
SET @salt := FLOOR(RAND() * 0xFFFFFFFF);
SELECT password FROM users LIMIT i,1 INTO @pwd;
SELECT SHA1(CONCAT(@pwd, @salt)) INTO @hashedpwd;
UPDATE users
SET salt=@salt, hashedPassword=@hashedpwd
WHERE password=@pwd;
SET i := i + 1;
END WHILE;
END;
;;
并替换其中password=@pwd使用编码,其中username=@username
很好,
由于您正在使用该查询更新表:
UPDATE users
SET salt=@salt, hashedPassword=@hashedpwd
WHERE password=@pwd;
它使用给定的密码为所有行写入相同的salt/hash密码。这就是你看到这些数据的原因
我很确定您的RAND每次都会创建不同的随机值,但您只需使用相同的数据一次更新所有行。为什么不使用第一个选择来获取所有数据并将其用于更新?也许光标会在这里帮助你。。。有关详细信息,请参阅
UPDATE users
SET salt=@salt, hashedPassword=@hashedpwd
WHERE password=@pwd;