我正在研究建立一个登录系统,并且读取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还是安全的.