我知道关于这个问题已经有十几个以上的提问。但我想知道,对于登录系统,是使用像sha1、sha512等哈希方法加密密码更好,还是使用Mcrypt密码算法更好?
我知道使用哈希方法(如sha)加密后解密是不可能的,而如果使用mcrypt加密,则可以解密。但是,使用mcrypt是否安全,因为你也可以解密?
我知道关于这个问题已经有十几个以上的提问。但我想知道,对于登录系统,是使用像sha1、sha512等哈希方法加密密码更好,还是使用Mcrypt密码算法更好?
我知道使用哈希方法(如sha)加密后解密是不可能的,而如果使用mcrypt加密,则可以解密。但是,使用mcrypt是否安全,因为你也可以解密?
密码不可恢复。对它们进行哈希的目的是确保如果数据库被攻击者入侵,攻击者将无法访问每个密码,因此也无法访问每个用户的账户(以及在其他服务中重复使用该密码的所有账户)。
$_POST['input']
进行提交的,其中$_POST['input']
是实际的密码,在哈希之前。这会有问题吗? - Roland对于不需要在以后使用明文密码的密码存储,您始终应该使用哈希函数。这样,您可以检查密码,但潜在攻击者无法找出明文密码(当用户始终使用相同密码时,这很重要)。
密码不应该是可恢复的。因此,您需要使用哈希算法。最流行的是MD5和SHA1。我不建议使用MD5,因为它很容易受到攻击,并且有许多预生成的哈希值。SHA1更好一些,但也存在一些问题。最安全的是基于this的SHA256/SHA512(SHA2系列的一部分)。尽管如此,SHA2系列的问题在于它非常依赖于SHA1。它目前还没有被破解,但很快就可能会被破解。如果您有时间,可以移植一个为SHA3竞赛或一个较少知名的算法制作的算法。如果您可以安装扩展程序,则SHA3竞争者已经拥有PHP扩展程序。
一个关于安全级别的好表格在Wikipedia上。如果您已经选择了算法,您应该搜索“[算法]的碰撞攻击”和“[算法]的预像攻击”,以查看是否存在攻击(Wikipedia可能已经过时)。
此外,不要忘记加盐。这意味着你应该对 $string+"Whatever" 进行哈希处理,而不是 $string。
openssl_random_pseudo_bytes()
生成512字节的数据,并将其输出到文件中。 - Tower