一种单向密码加密算法

5

哪种单向加密算法是最安全的,可用于加密密码?

MD5和SHA(1..512)经常被使用,但它们设计的重点是速度,这对于防止密码暴力破解并不利。

该算法不应太过奇特,以便可以与常见的程序语言/运行时(如Java、.NET或Python)一起使用。


1
无论使用何种方法,您都需要一个好的盐。我认为SHA已经足够好了,在密码这样的小数据集上,哈希方法并不会有太大影响。 - Prof. Falken
4
注意:MD5和SHA不是加密算法,而是哈希算法。据我所知,至少MD5已被证明容易受到字典攻击的影响。 - Thorsten Dittmar
2
这实际上是安全.SE早期问题的重复:http://security.stackexchange.com/q/4789/485 - 我建议迁移并关闭为重复。 - Rory Alsop
@Thorsten:任何哈希算法都同样容易受到字典攻击(字典基于密码选择,而不是哈希算法本身)。MD5存在一种碰撞攻击,影响某些用途(例如数字签名),但不影响密码。同时,碰撞攻击的存在表明足够的弱点,通常最好避免使用MD5(除非像验证文件传输这样没有攻击者的情况)。 - Jerry Coffin
“单向加密”被称为“哈希”。点赞仅因为其他人寻找正确术语时会受到帮助。 - Ian Boyd
3个回答

9


2
单纯的哈希加密并不能保护你,这一点在其他相关文章中已经有所提及。
bcrypt和scrypt是不错的选择,但是它们并没有被大多数编程语言直接支持。虽然找到一个支持它们的库应该不是问题。除了这两个方法,你还可以使用基于密码的加密(PBE),如PKCS#5中所述,最好使用PBKDF2。几乎任何地方都应该内置支持PBE。

1
Bcrypt可能不容易找到,但至少Ruby、Python、.NET和Mono、Java、Perl、PHP和Erlang都已经实现了它——请参见How To Safely Store A Password | codahale.com上的初始(未区分)链接。 - nealmcb

1

2
哈希数千次仍然不建议使用,相比bcrypt、scrypt或PBE。 - emboss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接