2016-10-19 119 views
0

目前在Qt中爲測驗程序構建一個面向Web的驗證服務。Qt計算和比較密碼哈希

這是我的理解是,當在數據庫中存儲用戶密碼時,它必須被遮擋以防其落入不法之徒手中。

流行的方法似乎是將Salt添加到密碼,然後存儲計算出的組合散列的過程。

該散列可以稍後進行比較:

HASH(userinput + SALT)= StoredHash

Qt提供QCryptographicHash ::散列(數據,算法方法),但作爲密鑰大概是隨機我沒有看到這是如何有用的。

或者Qt提供QMessageAuthenticationCode ::散列(消息,密鑰,算法方法)我認爲消息將是userpassword和密鑰將是pseudo_random(row_id)是正確的。

我想使用Sha2-256算法我需要Cryptographically secure pseudorandom number generator

+0

*「但是因爲密鑰大概是隨機的」* - 'QCryptographicHash :: hash'不使用密鑰。 –

+0

奇怪的是,沒有一個由QCryptographicHash提供的算法被推薦用於密碼學使用。 – dtech

+0

@ddriver:[QCryptographicHash](https://doc.qt.io/qt-5/qcryptographichash.html#Algorithm-enum)支持SHA-512,這肯定是足夠好的加密使用。 – TonyK

回答

0

目前散列密碼的常用算法是bcrypt。

有一個簡單的C++實現here

沒有爲散列密碼兩個重要的事情:

  1. 鹽,如你所說,以防止彩虹表攻擊。每個用戶的鹽應該不同。
  2. 迭代散列,您將散列密碼數千次,使暴力攻擊明顯變慢。

bcrypt實現這兩個。