如果看起来像这样的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语句中完成。
答案 0 :(得分:1)
您无法使用SQL语句安全地散列和验证密码,因为无法搜索盐渍哈希,并且因为大多数数据库都不提供适当的哈希函数。
而是使用开发语言中的BCrypt,SCrypt或PBKDF2等哈希函数。对于验证,首先仅按用户名/ id搜索哈希值,然后再次使用开发语言验证找到的哈希值。