如何减小SHA1的大小?

时间:2011-06-06 10:25:56

标签: java algorithm security sha

我有一个问题,也许是一个愚蠢的问题,我想在使用SHA1算法进行散列后将数据存储在数据库中。但是,在将来的某个时间,数据库中的大小将会增加,因为SHA1中的大小字很大。

我们可以减小SHA1算法的大小,可能是一半大小。对不起我的愚蠢问题,以及我糟糕的英语。谢谢。 :d

我正在使用JAVA。

3 个答案:

答案 0 :(得分:10)

每个哈希20个字节(假设二进制存储)真的太多了吗?如果您当前使用十六进制编码切换到二进制,则每个哈希节省20个字节。与十六进制相比,Base64节省了大约10个字节。

如果您只是截断加密哈希,它仍然是一个很好的加密哈希,但输出大小会减少。您需要的输出大小取决于您的应用程序。

针对随机更改的完整性检查可以使用更短的32-64位哈希,并且不需要加密哈希函数。

如果您需要唯一性,则哈希值应为>>2*log_2(entries)位(请参阅birthday paradox)。大约120位,它类似于GUID / UUID(GUID有一个基于sha1的生成模式)

如果你想要加密强度,我会避免低于128位。

答案 1 :(得分:5)

如果你减少它,它不再是SHA1 :)。你必须考虑不同的算法

答案 2 :(得分:4)

没有;根据定义,SHA-1散列的大小为160位。我强烈怀疑哈希的大小是个问题;我想你的数据库中还有其他数据吗?最有可能的是,您会发现数据的其他部分对数据库大小的贡献更大。你希望这些哈希值有多少行?

然而, 在将哈希值存储为字符串之间存在大小差异(这将至少需要40个字节,具体取决于字符串编码)并将其存储为二进制数据(这将需要20个个字节)。

可以切换到另一种算法,正如其他人已经注意到的那样,但从安全角度来看,这可能不是一个好的选择 - 哈希算法的输出长度越短,它就越弱