「java的散列值」java实现

博主:adminadmin 2023-01-07 21:39:07 842

本篇文章给大家谈谈java的散列值,以及java实现对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java中单向散列函数算法????

Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。

数学表述为:h = H(M) ,其中H( )--单向散列函数,M--任意长度明文,h--固定长度散列值。

在信息安全领域中应用的Hash算法,还需要满足其他关键特性:

第一当然是单向性(one-way),从预映射,能够简单迅速的得到散列值,而在计算上不可能构造一个预映射,使其散列结果等于某个特定的散列值,即构造相应的M=H-1(h)不可行。这样,散列值就能在统计上唯一的表征输入值,因此,密码学上的 Hash 又被称为"消息摘要(message digest)",就是要求能方便的将"消息"进行"摘要",但在"摘要"中无法得到比"摘要"本身更多的关于"消息"的信息。

第二是抗冲突性(collision-resistant),即在统计上无法产生2个散列值相同的预映射。给定M,计算上无法找到M',满足H(M)=H(M') ,此谓弱抗冲突性;计算上也难以寻找一对任意的M和M',使满足H(M)=H(M') ,此谓强抗冲突性。要求"强抗冲突性"主要是为了防范所谓"生日攻击(birthday attack)",在一个10人的团体中,你能找到和你生日相同的人的概率是2.4%,而在同一团体中,有2人生日相同的概率是11.7%。类似的,当预映射的空间很大的情况下,算法必须有足够的强度来保证不能轻易找到"相同生日"的人。

第三是映射分布均匀性和差分分布均匀性,散列结果中,为 0 的 bit 和为 1 的 bit ,其总数应该大致相等;输入中一个 bit 的变化,散列结果中将有一半以上的 bit 改变,这又叫做"雪崩效应(avalanche effect)";要实现使散列结果中出现 1bit 的变化,则输入中至少有一半以上的 bit 必须发生变化。其实质是必须使输入中每一个 bit 的信息,尽量均匀的反映到输出的每一个 bit 上去;输出中的每一个 bit,都是输入中尽可能多 bit 的信息一起作用的结果。

Java相关:什么是散列码?

散列码就是通过一种不可逆的散列(Hash)算法,对一个数据进行计算,获得一个“唯一”的值。这个值可以对这个数据进行标识,在查找数据的时候,可以通过这个值来快速定位数据,从而有效减少开销。

由于散列长度是有限和固定的,因此在数据极多的情况下散列值会出现重复,用术语讲就是“碰撞”。这个时候就需要其它方法来消除这种碰撞,比如再散列、拉链算法等。

举个例子,设计一个散列算法,这个算法是把比划数相加。

“知道”的散列值就是20,

“你好”的散列值就是13。(我数对没有? :))

java 对象的散列值

Object类定义的 hashCode 方法确实会针对不同的对象返回不同的整数

在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,

两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果,如果不等,则不作强制性性要求,一般来说会生成不同的整数结果

对了,补充一点,返回该对象的哈希码值是为了提高哈希表的性能,像util类里面的HashTable

关于java的散列值和java实现的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。