Php crypt()的替代方案

Php crypt()的替代方案,php,crypt,Php,Crypt,我正在编写脚本,需要保存密码。出于开发目的,我一直在使用crypt()函数,因为它简单易用。现在我已经基本完成了,我想用更好、更一致的东西来代替它 我关注的一些问题是: 并非每个系统都支持所有算法 有时,盐的使用取决于结果(似乎是安全问题) 我想要一些与PHP4.3+一起工作的东西 有什么可用的,或者我应该坚持使用crypt()?我考虑过使用md5(md5($password)。$salt)。感谢您的洞察力。密码没有什么问题 如果您的服务器不支持,请使用其他服务器 您应该永远不要使用MD5对

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

我关注的一些问题是:

  • 并非每个系统都支持所有算法
  • 有时,盐的使用取决于结果(似乎是安全问题)
我想要一些与PHP4.3+一起工作的东西


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

密码没有什么问题

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

您应该永远不要使用MD5对密码进行哈希运算(或者甚至使用SHA1)

使用bcrypt(crypt的blowfish方法)或pbkdf2

这里有一个pbkdf2的实现:

有关原因和方式的更多信息,请参见:


首先:预先准备盐不是安全问题。有一个每密码盐是一个大好事,它是完全可以被存储在旁边的pw


现在:只要您不将密码散列从一个系统传输到另一个系统,并且后者不支持第一个系统的默认算法,根据定义,就不会发生什么坏事。因为PHP 5.3中有内置的算法,比如Blowfish,保证可以使用。

你想要“比
crypt()
更好”的东西,并且你建议使用双md5?我在使用md5和sha1的项目中工作过(不是一起)。关于sha1的更多信息:salt是预先添加的,因为如果没有它,您就不能使用相同的salt来散列您要检查的密码。这不是安全问题;事实上,如果你的散列是唯一的盐(它们应该是盐的),那么它必须存在。如果你不得不使用PHP4,那么你或你的老板正在做一些非常非常错误的事情@史蒂沃:我能弄清楚,因为你必须弄清楚才能验证用户的身份。如果我可以访问你的数据库,那么很可能我已经拥有了你的服务器。问题是,我正试图让这项工作适用于其他用户,在这些用户中,我无法控制他们的系统,并且并非所有的加密方法都可用,事实上,我的服务器上没有河豚,尽管它有sha512,而我使用的另一台服务器正好相反。@steveo225如果你想为了便携性而牺牲安全性,我为你的客户感到抱歉。md5有什么问题?我见过许多其他已知的脚本系统使用它,比如vBulletin?@steveo225:只需使用一个好的默认值进行配置即可。如果在某些系统上它不存在,可以使用另一个算法。另外,使整个身份验证部分可配置,以便将您的应用程序集成到SSO系统中。@steveo225仅在我工作的计算机上,使用CUDA,我每秒可以破解15亿MD5密码