我知道MD5的安全性最近有问题,这就是很多人使用盐的原因(我根本不明白这一点)但是我想知道你是否想在php中轻松实现安全系统你能不能md5两次?
赞test
> 098f6bcd4621d373cade4e832627b4f6
> fb469d7ef430b0baf0cab6c436e70375
基本上是这样的:
$val = 'test';
$val = md5($val);
$val = md5($val);
这会解决整个彩虹安全问题吗?有没有一个简单/ noob证明的方式在PHP中制作安全的数据库密码?
答案 0 :(得分:9)
Salt是完全独立的工具。使用它 not 弥补了底层哈希函数的弱点。这里的想法是用于字典攻击的表的 size 变得非常大(例如,对于一个字节的盐,大256倍)。盐不通常保密,但它相对随机,因此正在进行字典攻击的攻击者不能按原样对每个单词进行散列,而是必须考虑每个可能的盐值。冒着重复的风险:它处理了(大多数)人们如何选择密码的弱点,不哈希函数本身的任何弱点。
答案 1 :(得分:4)
如果您不相信MD5,可以使用hash()函数尝试更高的算法:
$hash1 = hash('sha1', 'The string to hash by SHA-1');
$hash2 = hash('sha256', 'The string to hash by SHA-256');
$hash3 = hash('sha512', 'The string to hash by SHA-512');
$hash4 = hash('ripemd160', 'The string to hash by RIPEMD-160');
在我看来,哈希两次是没有意义的。
编辑:修正了最后一行代码中的拼写错误。
答案 2 :(得分:3)
您是否使用MD5算法......
不,攻击者总是可以拥有两个彩虹表(一个用于额外的哈希值,一个用于密码)。来自another answer of mine:
[...]它仍然只需要密码而无需破解。换句话说,你只是将散列函数应用于同一个东西几次。
你使用盐来使攻击者更难以获取你的密码,因为他需要知道盐,以便他可以用它来计算密码的哈希值。
答案 3 :(得分:1)
安全存储密码很棘手,大多数此处发布的建议都不准确。因此,我将遵循Thomas Ptacek关于该主题的广泛引用的帖子:http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html
答案 4 :(得分:0)
为了记录,我评估了
$val = 'test';
$salt='somerandom!!aa##9900';
$val = md5($salt.$val);
$val = md5($val);
非常安全。这个秘密就在盐中。
然而,md5很短,因此并发的可能性很高(1.208.925.819.614.629.174.706.176 = 32 ^ 16,32个单词,每个都有十六进制)