龙空技术网

密码学中的哈希函数

苍耳文化公司 113

前言:

而今朋友们对“java哈希函数”大概比较珍视,咱们都需要知道一些“java哈希函数”的相关内容。那么小编在网络上网罗了一些有关“java哈希函数””的相关内容,希望兄弟们能喜欢,兄弟们快快来学习一下吧!

哈希函数(Hash function)也叫杂凑函数。

哈希函数非常有趣,它可以对任意一段字符串数据,输出其“数据指纹”。

这个函数简单讲就是:hash(x)=y。

这里x叫“哈希输入”,它可以是一段任意长度的字符串。

y则叫“哈希输出”,或者叫“哈希值”,它是一段具有固定长度的字符串。

比如哈希函数中的一种:sha256(Secure Hash Algorithm256:安全哈希算法),它输出的哈希值是一个具有256位的二进制字符串,如果转写为16进制的话,那就有64位。

比如sha256(狗)=cecd675a4c3cb00d1fee2e46eb53f902c9c5d09fa0636f7ea83e10e3214ba656。

其实哈希函数除了sha256之外呢,另外还有很多,但是目前最为著名的就是sha256,因为比特币系统用到的哈希函数就是sha256。

哈希函数具有以下典型特征:

1、确定性:某一个输入必然对应唯一一个输出的哈希值。换句话说,输出不同,则输入必然不同。

2、一般不可逆性:哈希函数很容易由输入得到输出,但是却极难由输出逆推出输入。大家注意,加密货币挖矿的过程,可以简单理解为是一个由输出“勉强”找到输入的过程,所以挖矿-是极其困难的,至少人脑是做不到的,而现在普通电脑也基本做不到了,只有拥有巨大算力的矿池、矿场可以做到。另外,挖矿用到的方法实际上是穷举法,并不是逆推法(从本质上讲,只有生成的输出哈希值以一定数量的零开头,矿工才能验证区块。零的数量决定挖矿难度,并随着专用于网络的哈希率变化而变化)。

3、一般无哈希冲突:理论上,不同的输入,也可能得到相同的输出,这个叫“哈希冲突”,或者叫“哈希碰撞”。但是这个概率呢,相当于在现实世界中找到两片相同的树叶,这在现实中是不可能的。所以在实际操作中,是没有哈希冲突的,两个不同的输入,一定会得到不同的输出。

最后来谈谈,哈希函数有什么意义呢?

主要是可以对原始数据加密:原始数据设为x,而你呈现给别人的则是哈希值-hash(x)。别人无法通过hash(x)来反推x,但是在需要与合适的时候,却很容易输入x来验证hash(x)。

标签: #java哈希函数