【问题标题】:Encrypt / Decrypt Methods加密/解密方法
【发布时间】:2012-02-27 07:07:40
【问题描述】:

我知道有十几个关于此的问题。但我想知道使用 sha1、sha512 等哈希方法加密登录系统的密码是否更好,或者为此使用 Mcrypt 密码更好?

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

【问题讨论】:

  • 散列与加密无关。散列过程是单向的,不可逆的(至少不是设计使然)。对密码使用散列,忘记加密,因为你不想“解密”那些。使用 SHA-256、SHA-512 或 Whirlpool。将来还会有 SHA-3 系列。另外,混合一些盐和一个与数据库盐分开的文件系统密钥。
  • @rFactor - 我明白,而且我已经在使用 SHA512 和 salt 密钥。是的,我没有存储盐,只是通过的哈希值。文件系统密钥是什么意思?
  • 如果您在文档根目录之外的文件系统上有一个只是二进制文件的单个密钥,您可以加载它的内容并将其与盐和密码一起散列,您可以做得更好。这意味着为了破解哈希,您需要同时访问文件系统和数据库。
  • 您的意思是可以从认证提供商处购买的 SSL 密钥,或者我从哪里获得文件系统密钥?
  • 单次迭代的 SHA512 是一个糟糕的选择。使用慢速方案,例如 PBKDF2、bcrypt 或 scrypt。

标签: php hash encryption mcrypt


【解决方案1】:

Passwords must not be recoverable。对它们进行散列处理的目的是确保如果数据库遭到破坏,攻击者无法访问每个密码,从而无法访问每个用户的帐户(以及密码已被重复使用的其他服务上的每个帐户)。

【讨论】:

  • 好的,因为目前我正在使用复杂的算法来散列密码。我之所以问,是因为我正在考虑一种在需要时解密它们的方法,但是由于使用哈希,所以这是不可能的。此外,密码在传递给加密方法时是纯文本,我的意思是它是使用$_POST['input'] 发布的,这是实际密码,只有在我散列它之后,这是一个问题吗?
  • 您永远不需要解密它们。如果有人丢失了密码,您可以让他们将其更改为新密码。
  • 如果数据在路由中被截获,那么这是一个密码泄露。如果你的数据库被破解了,那就是每个密码都被泄露了(除非你使用单向哈希)。
  • 如果您想在途中保护密码,请使用 HTTPS。
  • 我明白了,所以 HTTPS 基本上加密了路由输入。好吧,这意味着我无法让我的登录比现在更安全,其余的安全性取决于用户,如果有 HTTPS 或 HTTP。但是如果它有一个 SSL 密钥和一个 HTTPS 域呢?在我的 PHP 脚本中,我会更改哪些密码以存储到数据库中,以及我的随机生成的盐键呢?
【解决方案2】:

对于以后不需要明文密码的密码存储,总是应该使用哈希函数。这样您可以检查密码,但潜在的攻击者无法找到纯文本密码(这与用户总是使用相同的密码有关)

【讨论】:

  • “这是相关的,因为用户总是使用相同的密码”FTFY。
  • 理想用户不会。我认为 StackExchange 上没有人这样做。但普通用户在任何地方都有相同的密码。
【解决方案3】:

密码不得恢复。因此,您需要使用哈希算法。最受欢迎的是 MD5SHA1。我不建议使用 MD5,因为它很容易受到攻击并且有很多预生成的哈希值。 SHA1 更好,但也有一些。最安全的是基于thisSHA256/SHA512(SHA2 系列的一部分)。虽然,SHA2 系列的问题在于它非常基于 SHA1。它还没有被打破,但它很快就会被打破。如果您有时间,您可以移植为 SHA3 竞赛 制作的一种算法或一种鲜为人知的算法。如果可以安装扩展,那么 SHA3 的竞争对手已经有 PHP 扩展了。

安全级别的好表位于Wikipedia。如果你选择了,你应该谷歌“对[算法]的碰撞攻击”和[对[算法]的原像攻击”,看看是否有攻击(维基百科可能已经过时了)。

另外,别忘了加盐。这意味着你散列 $string+"Whatever" 而不是 $string。

【讨论】:

  • 你能告诉我在哪里可以找到更多关于 SHA3 未来算法的信息,因为据我了解它尚未发布?
  • 比赛剩下五个算法。他们的名单在csrc.nist.gov/groups/ST/hash/sha-3/Round3/submissions_rnd3.html。单击他们的名字以下载有关他们的信息。这包括方法和 C 端口(不幸的是,不是 PHP)。
  • 1) 普通哈希对于密码哈希是错误的。将 bcrypt 或 PBKDF2 与盐一起使用。 2) SHA-3 对密码散列没有任何优势,因此无需等待或调查。对于密码散列,即使 md5 也不比 sha-2 差多少。加密突破主要影响其他用例,例如完整性检查或签名。
  • SHA-3 在定义之前不应使用。 SHA-3 相对于 MD5 的唯一(非常暂时的)优势是目前还没有商用 FPGA,而且可能还没有针对它们的彩虹表。但是一旦选择了正确的算法,这种情况会很快改变。
猜你喜欢
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 2012-12-21
  • 2012-05-08
相关资源
最近更新 更多