我知道有十几个问题。但我想知道用sha1,sha512等散列方法加密登录系统的密码是否更好,或者为此更好地使用Mcrypt密码?
我知道在使用散列方法加密后解密是不可能的,如果使用mcrypt进行加密则可能。但是使用mcrypt是否安全,因为你也可以解密?
答案 0 :(得分:4)
Passwords must not be recoverable。散列它们的目的是确保如果数据库受到攻击,攻击者就无法访问每个密码,从而无法访问每个用户的帐户(以及其他重新使用密码的服务上的每个帐户)。
答案 1 :(得分:1)
对于密码存储,您不需要明文密码,总是应使用哈希函数。这样你可以检查密码,但潜在的攻击者无法找到明文密码(当用户总是使用相同的密码时这是相关的)
答案 2 :(得分:1)
密码不得被恢复。因此,您需要使用哈希算法。最受欢迎的是 MD5 和 SHA1 。我不会建议使用MD5,因为它很容易被攻击,并且有许多预生成的哈希值。 SHA1更好,但也有一些。最安全的是基于this的 SHA256 / SHA512 (SHA2系列的一部分)。虽然,SHA2系列的问题在于它非常基于SHA1。它尚未打破,但很快就会被打破。如果您有时间,可以移植为 SHA3竞赛制作的算法之一或不太知名的算法。如果您可以安装扩展,那么SHA3竞争对手已经拥有PHP扩展。
安全级别的一个好表位于Wikipedia。如果你选择的话,你应该谷歌“对[算法]的碰撞攻击”和[对[算法]的预图像攻击“看看是否存在攻击(维基百科可能已经过时)。
另外,不要忘记加盐。这意味着您散列$ string +“Whatever”而不是$ string。