如何减小SHA1的大小?

fah*_*hmi 5 java security algorithm sha

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

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

我正在使用JAVA.

Cod*_*aos 10

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

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

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

如果你需要唯一性,你应该>>2*log_2(entries)在哈希中有位(参见生日悖论).大约120位,它类似于GUID/UUID(GUID有一个基于sha1的生成模式)

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


Aas*_*set 5

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

然而,存在存储该散列作为一个字符串(这将需要至少40个字节,这取决于字符串编码),并把它作为二进制数据(这将需要20个字节)之间的尺寸差。

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


Cha*_*ara 5

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