【问题标题】:Alternative to crypt()crypt() 的替代方案
【发布时间】:2011-12-29 07:05:23
【问题描述】:

我正在编写一个脚本并且需要保存密码。出于开发目的,我一直在使用 crypt() 函数,因为它简单易用。现在我已经基本完成了,我想用更好、更一致的东西来替换它。

我的一些担忧是:

  • 并非每个系统都支持所有算法
  • 有时盐会预先添加到结果中(似乎是一个安全问题)

我想要一些适用于 PHP 4.3+ 的东西。

有什么可用的吗,还是我应该坚持使用crypt()?我考虑过使用md5(md5($password).$salt)。感谢您的洞察力。

【问题讨论】:

  • 你想要“比 crypt() 更好的东西”并且你提出双 md5?
  • 我参与过使用 md5 和 sha1 的项目(不一起使用)。更多关于 sha1 的信息:us.php.net/sha1
  • 盐是前置的,因为没有它,您不能使用相同的盐来散列您要检查的密码。这不是安全问题;事实上,如果你的哈希是唯一加盐的(它们应该是),它就必须存在。
  • 如果您曾经必须使用 PHP4,那么您或您的老板正在做一些非常、非常错误的事情!
  • @steveo:我可以弄清楚,因为您必须弄清楚才能对用户进行身份验证。如果我可以访问你的数据库,那么很可能我已经拥有你的服务器了。

标签: php crypt


【解决方案1】:

crypt没有错

如果您的服务器不支持,请使用其他服务器。

您应该绝不使用 MD5 对密码进行哈希处理(或者甚至 SHA1)

使用 bcrypt(crypt 的河豚方法)或 pbkdf2

这里有一个 pbkdf2 的实现: Encrypting Passwords with PHP for Storage Using the RSA PBKDF2 Standard

更多关于为什么和如何在这里的信息:

【讨论】:

  • 问题是,我正在尝试为我无法控制他们的系统并且并非所有加密方法都可用的其他用户进行这项工作,实际上河豚不在我的身上,虽然它有 sha512 ,而我玩的另一台服务器正好相反。
  • @steveo225 好吧,如果您想为便携性牺牲安全性,我为您的客户感到抱歉。
  • md5有什么问题?我见过许多其他已知的脚本系统都在使用它,比如 vBulletin?
  • @steveo225:只需使用良好的默认值配置即可。如果在某些系统上它不存在,则可以使用另一种算法。此外,使整个身份验证部分可配置,以便将您的应用程序集成到 SSO 系统中。
  • @steveo225 在我工作的电脑上,使用 CUDA 我可以每秒破解 15 亿个 MD5 密码 tomshardware.com/reviews/password-recovery-gpu,2945.html
【解决方案2】:

首先:添加盐不是安全问题。拥有每个密码的盐是一件大好事,将它与密码一起存储是完全可以的。

现在:只要您不将密码散列从一个系统传输到另一个系统,而后者不支持第一个系统的默认算法,那么按照定义不会发生任何不好的事情。从 PHP 5.3 开始,PHP 中有内置算法,例如 Blowfish,保证可用。

【讨论】:

    猜你喜欢
    • 2014-06-27
    • 1970-01-01
    • 2015-06-13
    • 2015-03-03
    • 2015-09-25
    • 2019-12-16
    • 2011-06-20
    • 2015-11-03
    • 2014-04-03
    相关资源
    最近更新 更多