既然经验法则是存储密码字符串的加盐散列,而不是密码字符串的加密形式,那么为什么PHP crypt()
函数使用基于des的算法呢?DES不是一种加密算法吗?手册上写着
…crypt()将使用基于Unix des的标准算法或系统上可用的替代算法返回一个散列字符串…
我从这里理解的是crypt()
只使用系统实现的算法。当然,DES是作为加密算法实现的,而不是用于加密的自定义散列算法。
PS -我知道DES已经过时了,没有人应该再使用它了。
基于des的密码散列的思想基本上是用密码加密一个零块,并传递一些轮数的盐。任何半体面的加密都会使密钥难以恢复,即使面对已知的明文,所以这就是为什么可以从加密函数中生成强密码哈希。
我认为 PHP默认值与此方案兼容