加密/解密方法

4

我知道关于这个问题已经有十几个以上的提问。但我想知道,对于登录系统,是使用像sha1、sha512等哈希方法加密密码更好,还是使用Mcrypt密码算法更好?

我知道使用哈希方法(如sha)加密后解密是不可能的,而如果使用mcrypt加密,则可以解密。但是,使用mcrypt是否安全,因为你也可以解密?


2
哈希不是加密。哈希过程是单向的,不可逆(至少不是设计上)。用哈希来处理密码,不要使用加密,因为你不想“解密”它们。选择SHA-256、SHA-512或Whirlpool。未来还将有SHA-3系列。此外,混入一些盐和一个与数据库盐分开的文件系统密钥。 - Tower
@rFactor - 我明白了,我已经在使用SHA512和盐密钥。是的,我没有存储盐,只存储密码的哈希值。你所说的文件系统密钥是什么意思? - Roland
1
如果您在文档根目录之外的文件系统上有一个单一密钥,它只是一个二进制文件,那么您可以使其更好。您可以加载其内容并与盐和密码一起进行哈希处理。这意味着为了破解哈希,您需要访问文件系统和数据库。 - Tower
SHA512 单次迭代是一个不好的选择。使用慢速方案,例如 PBKDF2、bcrypt 或 scrypt。 - CodesInChaos
@Roland,你可以生成文件系统密钥,它就是一些数据。例如,使用 openssl_random_pseudo_bytes() 生成512字节的数据,并将其输出到文件中。 - Tower
显示剩余8条评论
3个回答

4

密码不可恢复。对它们进行哈希的目的是确保如果数据库被攻击者入侵,攻击者将无法访问每个密码,因此也无法访问每个用户的账户(以及在其他服务中重复使用该密码的所有账户)。


好的,因为目前我正在使用一个复杂的算法来哈希密码。我之所以问这个问题是因为我在考虑一种解密密码的方法,但由于使用哈希,这是不可能的。另外,当密码通过加密方法传递时,密码是明文的,我的意思是它是使用$_POST['input']进行提交的,其中$_POST['input']是实际的密码,在哈希之前。这会有问题吗? - Roland
如果数据在传输过程中被拦截,那么一个密码就会被泄露。如果你的数据库被破解了,那么每个密码都会被泄露(除非你使用单向哈希)。 - Quentin
我明白了,那么HTTPS基本上是对路由输入进行加密。这意味着我无法做任何事情使我的登录比现在更安全,其余的安全性取决于用户是否使用HTTPS或HTTP。但是如果它有SSL密钥和HTTPS域名呢?在我用PHP脚本将密码哈希存储到数据库中的地方会有什么变化,我的随机生成的盐键又该怎么办? - Roland
就你所编写的任何服务器端编程而言,SSL 的使用是透明的。 - Quentin
我明白了,谢谢你提供的信息,这让我更清楚哈希和加密的真正含义 :) - Roland
显示剩余2条评论

1

对于不需要在以后使用明文密码的密码存储,您始终应该使用哈希函数。这样,您可以检查密码,但潜在攻击者无法找出明文密码(当用户始终使用相同密码时,这很重要)。


1
这是相关的,因为用户总是使用相同的密码。FTFY。 - Emil Vikström
理想的用户不会这样做。我认为 StackExchange 上也没有人会这么做。但是普通用户可能会在所有地方都使用相同的密码。 - axiomer

1

密码不应该是可恢复的。因此,您需要使用哈希算法。最流行的是MD5SHA1。我不建议使用MD5,因为它很容易受到攻击,并且有许多预生成的哈希值。SHA1更好一些,但也存在一些问题。最安全的是基于thisSHA256/SHA512(SHA2系列的一部分)。尽管如此,SHA2系列的问题在于它非常依赖于SHA1。它目前还没有被破解,但很快就可能会被破解。如果您有时间,可以移植一个为SHA3竞赛或一个较少知名的算法制作的算法。如果您可以安装扩展程序,则SHA3竞争者已经拥有PHP扩展程序。

一个关于安全级别的好表格在Wikipedia上。如果您已经选择了算法,您应该搜索“[算法]的碰撞攻击”和“[算法]的预像攻击”,以查看是否存在攻击(Wikipedia可能已经过时)。

此外,不要忘记加盐。这意味着你应该对 $string+"Whatever" 进行哈希处理,而不是 $string。

你能告诉我在哪里可以找到更多关于SHA3未来算法的信息吗?据我所知,它尚未发布。 - Roland
1
比赛中还剩下五个算法。它们的列表在http://csrc.nist.gov/groups/ST/hash/sha-3/Round3/submissions_rnd3.html上。点击它们的名称以下载有关它们的信息。这包括方法和C端口(不幸的是没有PHP)。 - axiomer
2
  1. 使用普通哈希算法进行密码哈希是错误的。请使用带有盐的bcrypt或PBKDF2。
  2. SHA-3在密码哈希方面没有任何优势,因此无需等待或研究它。即使是md5对于密码哈希而言也不比sha-2差太多。密码学突破主要影响其他用例,例如完整性检查或签名。
- CodesInChaos
SHA-3 在定义之前不应该被使用。SHA-3 相对于 MD5 的唯一 - 非常临时的 - 优势是目前还没有商用 FPGA,也可能还没有针对它们的彩虹表。但是一旦选择了正确的算法,这种情况将非常快地改变。 - Maarten Bodewes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接