加密密码

什么是最快也最安全的方式来加密密码(首选PHP),并且您选择哪种方法是可移植的?

换句话说,如果我以后将我的网站迁移到不同的服务器,我的密码会继续工作吗?

正如我所了解的,我现在使用的方法取决于服务器上安装的库的确切版本。

0
额外 编辑
意见: 1
天啊!只是提到这让我想要去设置一堆陷阱和一个食人鱼坦克......
额外 作者 gyurisc,

7 答案

有一个邪恶的天才官方补丁(可用于fileplanet等),但也有一个非官方的补丁在这里: http://www.n1nj4.com/EvilPlanet/TheGame/mod_unofficialpatch.php ,它增加了很多调整。

3
额外

我不一定在寻找最快但平衡性很好的代码,因为这些代码正在开发的一些服务器相当慢,散列和存储密码的脚本需要运行5-6秒,而且我已经将其缩小到哈希(如果我评论哈希运行,在1-2秒内)。

它不一定是最安全的,我不是为银行(现在)编码,但我肯定 将密码存储为纯文本。

0
额外
虽然这是封闭的,但你仍然应该尽可能安全地存储密码。什么是获取someeones银行帐户密码的最简单方法?创建一个令人敬畏的网站,让你的人注册。大多数人会使用现有的密码。现在你有一个巨大的密码列表。值得一提的是,如果我知道这是一个糟糕的实现,那么获取其他人密码的最快方法就是破解你的系统。
额外 作者 Andrew T Finnell,

应该指出,你不想加密密码,你想散列它。

加密的密码可以解密,让别人看到密码。哈希是一种单向操作,因此用户的原始密码(加密)消失了。


至于你应该选择哪种算法 - 使用目前接受的标准算法:

  • SHA-256

当你散列用户密码时,一定要在其他垃圾中散列。例如。:

  • password: password1
  • salt: PasswordSaltDesignedForThisQuestion

将盐追加到用户的密码中:

String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");
0
额外
-1 SHA-256不是密码散列函数,因此它不安全。它可以是(PBKDF2)的一部分,但这完全不同。你的例子也是误导性的,因为盐不应该是一个聪明的词组,它应该是一个随机的(每用户)价值。
额外 作者 Brendan Long,

我和彼得在一起。开发人员似乎并不了解密码。我们都选择(我也有这个)MD5或SHA1,因为它们速度很快。思考它(最近有人指出了这一点),这没有任何意义。我们应该选择一个愚蠢缓慢的哈希算法。我的意思是,在规模上,一个繁忙的网站会散列密码是什么?每1/2分钟?谁在乎是否需要0.8秒vs 0.03秒的服务器?但是这种额外的缓慢是巨大的,以防止所有类型的常见的暴力破坏攻击。

从我的阅读中,bcrypt是专门为安全密码散列而设计的。它基于河豚,并且有很多实现。

For PHP, check out PHPPass http://www.openwall.com/phpass/

For anyone doing .NET, check out BCrypt.NET http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx

0
额外

如果您为登录系统选择加密方法,那么速度不是您的朋友,杰夫与托马斯Ptacek有关密码和结论是你应该使用最慢,您可以承受的最安全的加密方法。

从托马斯Ptacek的博客:
  速度正是你在密码哈希函数中不需要的。     现代密码方案受增量密码破解程序的攻击。<�​​/ p>      增量饼干不会预先计算所有可能的破解密码。他们分别考虑每个密码散列,并且他们通过密码散列函数以与PHP登录页面相同的方式提供他们的字典。 Ophcrack等彩虹桌面饼干使用空间攻击密码;像John the Ripper,Crack和LC5这样的增量破解者可以和时间一起工作:统计和计算。     密码攻击游戏是在破解密码X的时候计分的。对于彩虹表,这个时间取决于你的表需要多大以及你能够多快搜索它。使用增量破解程序时,时间取决于您可以以多快的速度运行密码哈希函数。     

您可以更好地优化您的密码哈希函数,密码哈希函数获得的速度越快,您的方案就越弱。 MD5和SHA1,即使是传统的分组密码,如DES,也被设计得很快。 MD5,SHA1和DES是弱密码散列。在现代CPU上,像DES和MD5这样的原始密码构建模块可以进行比特,矢量化和并行化,从而快速地进行密码搜索。游戏式FPGA实现仅需花费数百美元。

0
额外

考虑使用 bcrypt 它在许多现代框架中使用,如laravel。

0
额外

不管你做什么,都不要写你自己的加密算法。这样做几乎可以保证(除非你是一个密码专家),算法中会存在一个缺陷,使得破解微不足道。

0
额外
即使你是一个密码学者,它也可能有一个缺陷 - 在一个算法变得“流行”之前需要多年的审查,
额外 作者 Tom Ritter,
这是如此真实。这让我想起了类似于Don Knuth的轶事:很久以前,他试图编写一个随机数字生成器,并将他想象中的许多难以理解的操作堆积在一起。最后他跑了这个不朽的创作,并无限期地输出了数字4。 (细节可能在复述中被改变。)
额外 作者 ndkrempel,