Java 如何减小SHA1的尺寸?

Java 如何减小SHA1的尺寸?,java,algorithm,security,sha,Java,Algorithm,Security,Sha,我有一个问题,可能是一个愚蠢的问题,我想在使用SHA1算法散列后将数据存储在数据库中。然而,在将来,数据库中的大小将增加,因为SHA1中的大小字很大 我们可以减少SHA1算法的大小,可能是大小的一半。我为我愚蠢的问题和糟糕的英语感到抱歉。谢谢D 我正在使用JAVA。没有;根据定义,SHA-1散列的大小为160位。我强烈怀疑散列的大小是否会成为一个问题;我想您的数据库中也有其他数据?很可能,您会发现数据的其他部分对数据库大小的贡献更大。对于这些散列,您希望有多少行 但是,将散列存储为字符串(这将至

我有一个问题,可能是一个愚蠢的问题,我想在使用SHA1算法散列后将数据存储在数据库中。然而,在将来,数据库中的大小将增加,因为SHA1中的大小字很大

我们可以减少SHA1算法的大小,可能是大小的一半。我为我愚蠢的问题和糟糕的英语感到抱歉。谢谢D


我正在使用JAVA。

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

但是,将散列存储为字符串(这将至少需要40个字节,具体取决于字符串编码)和将其存储为二进制数据(这将需要20个字节)之间存在大小差异


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

如果减少它,它就不再是SHA1:)。你必须想一个不同的算法

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

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

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

如果需要唯一性,则应在哈希中包含
>2*log_2(条目)
位(请参阅)。大约为120位,类似于GUID/UUID(有一种基于sha1的GUID生成模式)


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

您需要哈希值做什么?所需的hashfunction和输出大小在很大程度上取决于您想用它做什么。Base64仍然是一个人类可读的字符串,但所需的字节数不到40个。@CodeInChaos:True;这也是一个选项。我想在事务信息中存储一个密钥,所以您的建议可能对编码有帮助。谢谢。。