4

我需要将一条消息散列成一个 30 个字符的字符串。对于这种用法,最好和最安全的哈希函数是什么?

4

2 回答 2

8

三十个字符(字节)是 240 位。

如果您不能移动球门柱以允许 32 个字符,那么您最终可能会使用 SHA-1,它会生成 160 位或 20 字节。当 Base-64 编码时,这将是 28 个字符。如果使用十六进制编码,则为 40 个字符,名义上超出范围。对于 32 个字符,您可以使用 SHA-256,但 Base-64 编码会增加该大小(到 44 个字符),而十六进制编码会将大小增加到 64 个字符。

如果您必须使用十六进制编码并且可以达到 32 字节,则可以使用 MD5(生成 128 位),但不建议将其用于任何新系统。使用 Base-64 编码,MD5 使用 24 个字符。否则,您将使用非常低安全性的算法 - 根本不推荐。

于 2010-08-21T06:43:46.207 回答
6

只需使用 SHA1 并修剪到 30 个字符。

import hashlib
hash = hashlib.sha1("your message").hexdigest()[:30]

已经证明,从诸如 SHA1 之类的加密安全哈希函数中删除字符对其安全性的影响可以忽略不计(但现在找不到参考资料)

于 2010-08-21T06:37:16.840 回答