Unk*_*ech 32 php encryption passwords
在(PHP首选)加密密码的最快,最安全的方法是什么?您选择的哪种方法是可移植的?
换句话说,如果我以后将我的网站迁移到其他服务器,我的密码会继续有效吗?
我被告知现在使用的方法取决于服务器上安装的库的确切版本.
Pet*_*ton 32
如果你为你的登录系统选择加密方法,那么速度不是你的朋友,杰夫与托马斯Ptacek谈论密码,结论是你应该使用你能负担得起的最慢,最安全的加密方法.
来自Thomas Ptacek的博客:
Speed正是您在密码哈希函数中不想要的.现代密码方案受到增量密码破解程序的攻击.
增量破解程序不会预先计算所有可能的破解密码.他们分别考虑每个密码哈希,并且他们通过密码哈希函数提供他们的字典,就像你的PHP登录页面一样.像Ophcrack这样的彩虹表饼干使用空间来攻击密码; John the Ripper,Crack和LC5等增量破解程序与时间一起工作:统计和计算.
密码攻击游戏在破解密码X时得分.对于彩虹表,该时间取决于您的表需要多大以及搜索速度有多快.对于增量破解程序,时间取决于您运行密码哈希函数的速度.
您可以更好地优化密码哈希函数,密码哈希函数获得的速度越快,您的方案就越弱.MD5和SHA1,甚至像DES这样的传统分组密码都设计得很快.MD5,SHA1和DES是弱密码哈希值.在现代CPU上,DES和MD5等原始加密构建块可以进行bitliced,矢量化和并行化,以便快速进行密码搜索.游戏结束FPGA实现仅花费数百美元.
Kar*_*uin 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
应该指出的是,你不想加密密码,你想要哈希它.
加密密码可以解密,让别人看到密码.散列是一种单向操作,因此用户的原始密码(加密)消失了.
至于您应该选择哪种算法 - 使用当前接受的标准算法:
当你对用户的密码进行哈希处理时,一定要在其他一些垃圾中哈希.例如:
password1PasswordSaltDesignedForThisQuestion将salt附加到用户的密码:
String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");
Run Code Online (Sandbox Code Playgroud)