为什么PHP crypt()将盐加入哈希?

前端之家收集整理的这篇文章主要介绍了为什么PHP crypt()将盐加入哈希?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究建立一个登录系统,并且读取PHP手册后,当你传递一个2位数的盐到crypt()函数它返回一个哈希字符串,字符串的前2位数字是你使用的盐.

例:

$salt = "kr";
echo crypt("mysecret",$salt); //returns "kreOI.F7eOQMY"

我的第一个想法是,这不会帮助一个试图扭转你的哈希的人吗?

我在维基百科上查找了salt,说:

For best security,the salt value is kept secret.

所以我不明白为什么这个crypt函数会返回所有的哈希前缀,使用的盐值?

有没有理由呢?这应该是安全问题吗?

crypt()函数已经过时了.在使用影子密码支持之前,它用于为旧式Unix系统提供哈希密码.盐在那里增加了暴力强制密码的复杂性.然而,由于盐由密码子系统随机生成,所以必须以清晰的方式存储,所以将来的密码操作将会起作用.如果在密封之前将盐嵌入密码,则没有实际的方法来验证密码 – 每当密码检查完成时,您都必须尝试每一个可能的盐 – 非常不切实际.所以,盐被加密的密码,所以你可以再次拉出来以备将来使用.
crypted password: xxabcdefghijklmn
                  ^^- salt
                    ^^^^^^^^^^^^^^-- crypted pw

if ('xx' + crypt('xx' + password) == 'crypted string') then
     password is ok
endif

这几天,crypt()是谷物盒子解码器环的安全等价物.出于历史目的,低安全性“谁关心如果它被破解”存储.对于任何现代密码使用,您将更加喜欢更现代的哈希,如sha1 / sha256 / md5.甚至md5这几天被认为是破碎的,sha1边缘有裂缝,(最后我检查过)sha256还是安全的.

猜你在找的PHP相关文章