2011-05-29 84 views

回答

7

一个重要的学习规则是“永远不要试图发明自己的密码学”。你最好只是浪费时间,最坏的情况是引入安全漏洞。

如果您不确定自己是否是该规则的例外情况,那么您对此规则不是例外。

加密哈希的设计者已经担心碰撞,所以你不必这样做。只需选择一个(SHA-256是一个不错的选择),并将您的精力集中在其他应用程序上。

+0

请注意,虽然SHA-256在尺寸和加密强度方面足够强大,但它对于密码散列格式来说并不好。你需要一个缓慢的盐渍方案,比如PBKDF2,scrypt或者bcrypt。 – CodesInChaos 2012-05-19 12:11:54

6

您可以改为使用SHA256作为散列算法。迄今为止没有发现碰撞,并且很可能未来在密码上看到任何碰撞。

5

你可以使用更长的散列。例如,SHA-512就是512位,并且(假设它是统一的),与SHA-256冲突的可能性要小得多。但个人而言,我不会为此担心。大多数密码本身小于32个字节(256位),因此与SHA-256发生冲突的可能性极低。

+0

我不是专家,但我很确定把位长加倍使得一个班级只有“有可能发生冲突”。 – cdiggins 2011-05-30 00:00:50

+2

@cdiggins:请你详细说明一下吗?我不知道你的意思。 – 2011-05-30 00:02:35

+1

假设你可以做的最好的事情就是随机猜测(就任何人都知道的SHA-N而言这是真的),挑选一个与给定的y碰撞的x的概率是1/2 SHA-256为256,SHA-512为1/2^512。后者很多,远小于前者的一半。尽管如此,这两种情况都不会发生,因为在你的余生中你每天都不会在彩票中获得第一名。 – Nemo 2011-05-30 00:15:05