0

如果 MySql 表如下所示,验证密码的 SQL 语句将是什么:

user_id   password     salt
-------   --------     ----
 1         23ed2...    m9f3m...

我试过了:

select * from password_table 
where user_id = 1 
and password = shal(`salt` + 'password') 
order by id desc 
limit 1

它没有返回任何东西。算法是sha512漩涡。

在 php 中是这样的:

hash('sha512', hash('whirlpool', $password));

它可能无法在 sql 语句中完成。

4

1 回答 1

1

您无法使用 SQL 语句安全地散列和验证密码,因为无法搜索加盐散列,并且因为大多数数据库不提供适当的散列函数。

而是使用您的开发语言中的散列函数,如 BCrypt、SCrypt 或 PBKDF2。对于验证,首先仅通过用户名/id 搜索哈希,然后再次使用开发语言验证找到的哈希。

于 2016-09-29T12:48:08.903 回答