2016-06-22 332 views
0

最安全的方式我有一個方法(僞):哈希密碼

string predefinedsalt = "03jf0j02j302jf0j3f08h3298fbckm91jr192jr091j2-r01" 

string dynsalt(user) 
{ 
    return md5(user.id) 
} 

而且散列密碼,我想用這些方法之一:

  1. md5(user.password)
  2. md5(user.password + predefinedsalt)
  3. md5(user.password + dynsalt(user))
  4. md5(md5(user.password) + dynsalt(user))

很多這種方式更安全嗎?

回答

3

您的任何建議都不適用於哈希密碼保存。使用像BCrypt,PBKDF2或SCrypt這樣的成本因子的慢哈希函數,並讓該函數從OS的隨機源生成一個鹽。

密碼破解工具已經在MD5開箱即用的情況下實現了這種組合,而MD5的方式太快了。人們可以用通用硬件計算大約100 Giga MD5 per second

+0

好的答案,但我不認爲那臺配備8個NVidia Titan X的電腦是_common hardware_。另外,您可能想要將[argon2](https://en.wikipedia.org/wiki/Argon2)添加到列表中。 – 1615903

+1

@ 1615903 - 你說得對,我的意思是說,每一個確定的攻擊者都可以以合理的價格訂購這種現成的硬件,但是沒有特別的知識來構建這樣的硬件(例如政府機構)。 – martinstoeckli