首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >压缩SHA-256散列

压缩SHA-256散列
EN

Stack Overflow用户
提问于 2012-10-19 21:09:17
回答 5查看 3K关注 0票数 3

我想自动生成Java的serialVersionUID (很长,或64位)。序列化对象的区别是由大约20个整数决定的,但并不总是由20个整数决定。我打算将整数转换为逗号分隔的数字字符串,并通过SHA-256散列函数运行它。

由于SHA-256是32字节长(256位),我需要它来适应serialVersionUID (64位),我如何才能将它转换为64位值,并最大限度地减少好的散列特征的损失?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-19 21:13:56

去掉多余的部分就行了。没有必要把事情复杂化。如果有比只取第一个(或任何其他) 64位更好的方法,那么散列就会首先被破坏。

票数 5
EN

Stack Overflow用户

发布于 2012-10-19 21:58:31

首先,您不太可能在正常意义上压缩一个好的哈希。压缩是一种减少冗余的可逆编码。在一个好的哈希中,应该没有要减少的冗余,因此压缩将是无效的。

由于SHA-256是32字节长(256位),我需要它来适应serialVersionUID (64位),我如何才能将其转换为64位值,并最大限度地减少好的哈希特征的损失?

那么这些好的特征是什么呢?好的哈希的主要特征是,它是不切实际的反转它;即,它是不切实际的计算出一个可能的输入,导致哈希。并且相关的特征是,给定产生给定散列的已知输入,产生给出相同散列的另一输入(即冲突)是不切实际的。

现在,当您从256位散列转换为64位散列时,您可以更容易地反转散列或为散列产生冲突……用蛮力。基本上,64位散列意味着在2^64中,任何随机输入都有一个给定的散列。这种可能性足够大,以至于一些拥有足够核心的“坏人”有足够的成功机会(在合理的时间内),使暴力破解成为一个合理的选择。

但这真的很重要吗?有人会通过创建冲突的serialVersion字符串来实现什么?这些字符串不是秘密的,它们不会告诉您任何关于对象的API的明确信息……

底线是,如果这些简化的散列被用作serialVersion字符串,那么(例如)仅使用SHA-256散列的前64位将不会有任何问题。不需要XOR或校验和或做任何其他更复杂的转换。

票数 3
EN

Stack Overflow用户

发布于 2012-10-19 21:16:04

您可以计算SHA-256摘要的循环冗余校验(CRC)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12974964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档