【问题标题】:What is a good option for a two-way processing of password?对于密码的双向处理,什么是好的选择?
【发布时间】:2009-08-28 01:59:58
【问题描述】:

我计划使用 Kohana 的加密类,但有没有更好、更安全的双向处理方式?我希望我的用户能够发送他们以前的密码的请求,而不是给他们重置密码。

您可以推荐任何算法或库吗?特别是在 PHP 中?

【问题讨论】:

  • 我认为这不是一个好主意。我讨厌网站通过电子邮件发送我自己的密码。密码应该写在nowhere
  • 我认为在实践中最好使用盐的单向哈希。通过让门打开以检索密码,您将承担将密码泄露给未经授权的人员的责任。共享相同密码的其他系统上的用户帐户也可能被盗用。
  • 您能否详细说明为什么需要将密码发送给他们而不是重置为新密码?这似乎是一种不必要的风险,但收效甚微。
  • 我刚刚看到一个 SO 帖子,一个好的身份验证系统应该使用这样的系统。但是在看到这里的所有答案之后,我想我确信我应该走一条路。我刚刚将 phpass 集成到我的项目中!:)

标签: php security


【解决方案1】:

我不会进行双向加密。这基本上根本没有加密,因为您需要访问代码中的加密密钥,这样您的所有密码都会被有效地泄露。

您应该使用单向函数,例如 SHA1MD5(SHA1 更好)。当用户尝试登录时,对他们使用的密码进行加密并将其与您存储的密码进行比较。

【讨论】:

    【解决方案2】:

    双向加密不是要走的路,因为持有服务器密钥的人基本上可以访问所有密码。这意味着如果您有一个心怀不满的员工或管理员,他们可能会带着您的所有用户帐户数据离开。另外,您将如何保护所需的密钥?当您向用户提供密码时,您将如何保护站点与用户之间的通信。我的建议是不要去那里。

    【讨论】:

      【解决方案3】:

      加密:

      base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
      

      解密:

      rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
      

      不过,最好对您的密码进行哈希处理(使用盐!)并为您的用户提供一个重置链接,这样即使您自己/您最终的错误也不会受到影响。

      【讨论】:

        【解决方案4】:

        我会模仿大家最喜欢的开发社区网站。

        但说真的,将密码托管在您的后端以便可以检索并显示给最终用户会带来一些安全问题:

        • 有权访问数据库/密钥的人可以访问所有密码
        • 密码可以在发送给最终用户进行显示时被嗅探

        我建议使用单向哈希(谷歌搜索最佳算法 - SHA-1 几年前还不错,但人们总是在破解加密算法方面取得进展)。您只需将哈希应用于最终用户提供的密码,并将其与您存储的哈希密码进行比较 - 如果结果字符串匹配您已成功验证。

        如果您想改用经过验证的公钥或对称密钥算法,至少要努力不要以纯文本形式通过网络发送密码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-24
          • 2020-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-09
          相关资源
          最近更新 更多