加密密码

UnkwnTech 30 php encryption passwords

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

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

我被告知现在使用的方法取决于服务器上安装的库的确切版本.

Peter Coulto.. 31

如果你为你的登录系统选择加密方法,那么速度不是你的朋友,杰夫与托马斯Ptacek谈论密码,结论是你应该使用你能负担得起的最慢,最安全的加密方法.

来自Thomas Ptacek的博客:
Speed正是您在密码哈希函数中不想要的.

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

增量破解程序不会预先计算所有可能的破解密码.他们分别考虑每个密码哈希,并且他们通过密码哈希函数提供他们的字典,就像你的PHP登录页面一样.像Ophcrack这样的彩虹表饼干使用空间来攻击密码; John the Ripper,Crack和LC5等增量破解程序与时间一起工作:统计和计算.

密码攻击游戏在破解密码X时得分.对于彩虹表,该时间取决于您的表需要多大以及搜索速度有多快.对于增量破解程序,时间取决于您运行密码哈希函数的速度.

您可以更好地优化密码哈希函数,密码哈希函数获得的速度越快,您的方案就越弱.MD5和SHA1,甚至像DES这样的传统分组密码都设计得很快.MD5,SHA1和DES是弱密码哈希值.在现代CPU上,DES和MD5等原始加密构建块可以进行bitliced,矢量化和并行化,以便快速进行密码搜索.游戏结束FPGA实现仅花费数百美元.


Karl Seguin.. 15

我和彼得在一起.开发人员似乎不懂密码.我们都选择(我也是犯了这个)MD5或SHA1,因为它们很快.想一想(因为有人最近向我指出了这一点)没有任何意义.我们应该选择一个愚蠢的哈希算法.我的意思是,就规模而言,一个繁忙的网站会将密码哈希么?每半分钟?谁关心服务器明智需要0.8秒vs 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


Ian Boyd.. 8

应该指出的是,你不想加密密码,你想要哈希它.

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


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

  • SHA-256

当你对用户的密码进行哈希处理时,一定要在其他一些垃圾中哈希.例如:

  • 密码: password1
  • 盐: PasswordSaltDesignedForThisQuestion

将salt附加到用户的密码:

String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");

  • -1 SHA-256不是密码散列函数,并且它不能用于此目的.它可以是**(PBKDF2)的一部分,但这完全不同.你的例子也是误导性的,因为盐不应该是一个聪明的短语,它应该是一个随机的(每用户)值. (4认同)

Anthony Gior.. 7

无论你做什么,都不要编写自己的加密算法.这样做几乎可以保证(除非你是一个密码学家),算法中会有一个缺陷会使破解变得微不足道.