2016-06-22 240 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