0

我正在使用 PASSWORD() 来散列我的密码。我知道这不是首选方法,可能不是很安全,但我仍在将它用于一些几乎不需要任何安全性的应用程序。所以,我的插入语句看起来像:

INSERT into AUTH(id,pass) VALUES ('myUserName', PASSWORD('myPass'));

我验证了 myPass 现在已经过哈希处理。

现在我正在尝试获取密码设置为 myPass 的行数。我尝试使用以下查询,但我继续得到 0 计数:

SELECT COUNT(*) FROM AUTH where pass=PASSWORD('myPass');

请问有什么建议吗?

4

1 回答 1

0

验证表中的passAUTH是否至少有 41 个字符,或从以下位置返回的任何值:

SELECT LENGTH(PASSWORD('foo'))
LENGTH(PASSWORD('foo'))  
-------------------------
                       41

此测试用例演示了当表中的passauthbad不足以容纳整个密码字符串时会发生什么:

 CREATE TABLE auth (id VARCHAR(32), pass VARCHAR(41));  // pass column matches length
 INSERT INTO auth VALUES ('abc',PASSWORD('abc'));

 CREATE TABLE authbad (id VARCHAR(32), pass VARCHAR(32));  // pass column too short
 INSERT INTO authbad VALUES ('abc',PASSWORD('abc'));

 SELECT COUNT(1) FROM auth WHERE pass=PASSWORD('abc');
 COUNT(1)  
 ----------
          1

 SELECT COUNT(1) FROM authbad WHERE pass=PASSWORD('abc');
 COUNT(1)  
 ----------
          0

另一个(不太可能)的问题是正在发生字符集转换,无论是在 INSERT 上还是在 SELECT 上都没有发生在另一个上。鉴于密码返回一个星号和十六进制数字(大写),但我真的不明白这应该是一个问题。

于 2013-07-18T22:42:19.013 回答