最快(最安全)的密码加密方式是什么(最好是在PHP中),对于您选择的哪种方法,它都可移植吗?

换句话说,如果以后将网站迁移到其他服务器上,我的密码可以继续使用吗?

有人告诉我,我现在使用的方法取决于服务器上安装的库的确切版本。

===============>>#1 票数:32 已采纳

如果您为登录系统选择一种加密方法,那么速度就不是您的朋友,杰夫和托马斯·帕塔塞克(Thomas Ptacek)经常碰到密码有关, 结论是您应该使用负担得起的最慢,最安全的加密方法。 。

从Thomas Ptacek的博客中:
速度正是您在密码哈希函数中所不想要的。

现代密码方案受到增量密码破解程序的攻击。

增量破解者不会预先计算所有可能的破解密码。 他们分别考虑每个密码哈希,并通过密码哈希函数将其字典提供给您的PHP登录页面。 诸如Ophcrack之类的彩虹表饼干使用空间来攻击密码。 开膛手John,Crack和LC5等增量破解者会随着时间而工作:统计和计算。

密码攻击游戏的时间是破解密码X所花费的时间。对于Rainbow表,该时间取决于您的表需要多大以及可以快速搜索它。 对于增量式解密器,时间取决于使密码哈希函数运行的速度。

优化密码哈希函数的能力越好,密码哈希函数获得的速度越快,方案就越弱。 MD5和SHA1,甚至是像DES这样的常规分组密码,都被设计为快速的。 MD5,SHA1和DES是弱密码哈希。 在现代CPU上,可以对DES和MD5之类的原始密码构建块进行位片化,向量化和并行化,以使密码搜索快速实现。 FPGA游戏实现成本仅为数百美元。

===============>>#2 票数:15

我和彼得在一起。 开发人员似乎不了解密码。 我们都选择(而且我也对此感到内and)MD5或SHA1,因为它们速度很快。 考虑一下(因为有人最近向我指出了这一点)没有任何意义。 我们应该选择一个很慢的哈希算法。 我的意思是,从规模上看,繁忙的网站会散列密码吗? 每1/2分钟? 谁在乎0.8秒与0.03秒的服务器明智时间? 但是这种额外的速度非常慢,无法阻止所有类型的常见蛮力攻击。

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

对于PHP,请查看PHPPass http://www.openwall.com/phpass/

对于使用.NET的任何人,请访问BCrypt.NET http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx

===============>>#3 票数:8

应该指出的是,您不想加密密码,而希望对其进行哈希处理。

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


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

  • SHA-256

而且,当您对用户密码进行哈希处理时,请确保也对它进行哈希处理。 例如:

  • 密码: password1
  • 盐: PasswordSaltDesignedForThisQuestion

将盐添加到用户密码:

String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");

===============>>#4 票数:7

无论您做什么,都不要编写自己的加密算法。 这样做几乎可以保证(除非您是密码学家)该算法中存在一个缺陷,使其难以破解。

===============>>#5 票数:2

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

===============>>#6 票数:1

我不一定要寻求最快的速度,而是要找到一个不错的平衡,正在开发此代码的某些服务器运行速度相当慢,散列和存储密码的脚本需要5到6秒钟才能运行,而我已经将其范围缩小到散列(如果我评论散列,它会在1-2秒内运行)。

不必一定是最安全的,我现在没有在申请银行,但我当然不会将密码存储为纯文本格式。

===============>>#7 票数:0

password_hash ( string $password , int $algo [, array $options ] ) (PHP 5> = 5.5.0,PHP 7)

password_hash()使用强大的单向哈希算法创建新的密码哈希。 password_hash()与crypt()兼容。 因此,由crypt()创建的密码哈希可以与password_hash()一起使用。

===============>>#8 票数:0

在数据库中插入密码Password_harsh($ password,PASSWORD_DEFAULT);时使用此功能。 从数据库中进行选择时,您可以使用if(password_verify($ password,$ databasePassword)){将要插入的密码与数据库中的密码进行比较{

}else{
echo "password not correct";
}

这将以安全格式破解密码

  ask by UnkwnTech translate from so

未解决问题?本站智能推荐:

关注微信公众号