2016-09-28 102 views
0

什麼將SQL語句是驗證密碼如果MySQL表看起來像這樣:鹽和sha512whirlpool驗證密碼在MySQL

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語句來完成。

+3

您不應該使用簡單的哈希函數來保護您的用戶密碼。你需要使用像PBKDF2,bcrypt,scrypt和Argon2這樣強大的散列方案。一定要使用高成本因子/迭代次數。選擇成本是很常見的,因此一次迭代至少需要100ms。查看更多:[如何安全地哈希密碼?](http://security.stackexchange.com/q/211/45523) –

回答

1

由於無法搜索鹽漬哈希,並且因爲大多數數據庫不提供合適的哈希函數,所以無法使用SQL語句安全地哈希和驗證密碼。

而是使用像您的開發語言中的BCrypt,SCrypt或PBKDF2這樣的散列函數。爲了驗證,首先僅通過用戶名/ id搜索散列,然後再次用開發語言驗證找到的散列。