Hash一般被翻译成“散列”,也可直接音译为“哈希”,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。
这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
Hash主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码,这些编码值叫做Hash值.也可以说,通俗的说Hash就是找到一种数据内容和数据存放地址之间的映射关系。
近期很多人问小编,最近市场火热的区块链哈希值是什么?什么叫哈希算法呢?原理是什么?本文讲着重讲解这部分内容
我们可以简单认为哈希值就是将“账页信息”进行哈希算法,计算得到一串字符密码,那么哈希算法就是区块链保证交易信息不被篡改的单向密码机制。哈希算法在接收一段明文(也就是账页信息)后,以一种不可逆的方式将其转化为一段长度较短、位数固定的散列数据。
区块链幸运哈希值算法竞猜游戏系统开发,哈希值dapp软件定制,游戏玩法规则定制,欢迎随时打扰小编
它有两个特点:
1.加密过程不可逆,也就是说我们无法通过输出的散列数据倒推原本的明文是什么。可以这样理解:小明对火星人说了一段话,火星人将这段话翻译成了%*……¥&&%% ,地球人没有一个人能将%*……¥&&%% 翻译出来,这样就保证了谁也不能篡改小明的那段话了。
2.输入的明文与输出的散列数据一一对应,任何一个输入信息的变化,都必将导致最终输出的散列数据的变化,这意味着这篇账页就算改了一个标点符号也会被发现,区块链这个账簿就将不承认这篇账页了。
那么什么叫哈希算法呢?
哈希算法是一种加密算法
哈希函数(Hash Function),也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M,映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值(Hash Value)、杂凑值或者消息摘要(Message Digest)。它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。
它的函数表达式为:h=H(m)
无论输入是什么数字格式、文件有多大,输出都是固定长度的比特串。以比特币使用的Sh256算法为例,无论输入是什么数据文件,输出就是256bit。
每个bit就是一位0或者1,256bit就是256个0或者1二进制数字串,用16进制数字表示的话,就是多少位呢?
16等于2的4次方,所以每一位16进制数字可以代表4位bit。那么,256位bit用16进制数字表示,当然是256除以4等于64位(比特串也没有跑出周易的64卦)。
这是从btc.com上随便拷贝的一个哈希值,不放心的话你可以数一下,是不是64位~
Hash函数的特点
哈希(Hash)函数具有如下特点。
易压缩:对于任意大小的输入x,Hash值的长度很小,在实际应用中,函数H产生的Hash值,其长度是固定的。
易计算:对于任意给定的消息,计算其Hash值比较容易。
单向性:对于给定的Hash值,要找到使得在解算上是不可行的,即求得Hash的逆向解算,很困难。在给定某个哈希函数H和哈希值H(M)的情况下,你想得出M,这在计算上是不可行的。即从哈希输出无法倒推输入的原始数值。这是哈希函数安全性的基础。
抗碰撞性:理想的Hash函数是无碰撞的,但在实际算法的设计中很难做到这一点。
有两种抗碰撞性:一种是弱抗碰撞性,即对于给定的消息,要发现另一个消息,满足在计算上是不可行的;另一种是强抗碰撞性,即对于任意一对不同的消息,使得在计算上也是不可行的。
高灵敏性:这是从比特位角度出发的,指的是1比特位的输入变化会造成1/2的比特位发生变化。消息M的任何改变都会导致哈希值H(M)发生改变。即如果输入有微小不同,哈希运算后的输出一定不同。
哈希算法
把网址A,转换成数字1。网址B,转换成数字2。
一个网址X,转换成数字N,根据数字N作为下标,就可以快速地查找出网址X的信息。这个转换的过程就是哈希算法。
比如这里有一万首歌,给你一首新的歌X,要求你确认这首歌是否在那一万首歌之内。
无疑,将一万首歌一个一个比对非常慢。但如果存在一种方式,能将一万首歌的每首数据浓缩到一个数字(称为哈希码)中(也就是利用哈希算法得到一系列的哈希值,即哈希码),于是得到一万个数字(哈希码),那么用同样的算法计算新的歌X的编码,看看歌X的编码是否在之前那一万个数字中,就能知道歌X是否在那一万首歌中。
作为例子,如果要你组织那一万首歌,一个简单的哈希算法就是让歌曲所占硬盘的字节数作为哈希码。这样的话,你可以让一万首歌“按照大小排序”,然后遇到一首新的歌,只要看看新的歌的字节数是否和已有的一万首歌中的某一首的字节数相同,就知道新的歌是否在那一万首歌之内了。
一个可靠的哈希算法,应该满足:
对于给定的数据M,很容易算出哈希值X=F(M);
根据X很难反算出M;
很难找到M和N使得F(N)=F(M)(这就是哈希值的不可解密性)
举个栗子:
小星与阿呆即时聊天中
阿呆:小星,今天来我家玩,来的路上,有一家披萨店,很好吃,顺便带一点哈。
小星:哦,要不你来我家玩吧,你顺便带上披萨。
阿呆:小星,你竟然都这么说了,看来只能抛硬币解决了。
小星:丫的,这个怎么抛,我怎么知道你有没有搞鬼。
阿呆:嗯,那到也是,要不这样。
1虑对结果加密阿呆:我心中想一个数,假设为A,然后A在乘以一个数B,得到结果C。A是我的密钥,我把结果C告诉你。你来猜A是奇数还是偶数,猜中了,算你赢。
小星:这不行,如果你告诉我C是12,我猜A是奇数,你可以说A是4,B是3。我猜A是偶数,你可以说A是3,B是4。要不你告诉我C是多少的时候,也告诉我B是多少。
阿呆:那这不行,告诉你C和B,不等于告诉你A是多少了,还猜个屁。不行得换个方式。
2不可逆加密阿呆:小星,你看这样可以不,我想一个A,经过下面的过程:
1.A+123=B
2.B^2=C
3.取C中第2~4位数,组成一个3位数D
4.D/12的结果求余数,得到E
阿呆:我把E和上述计算方式都告诉你,你猜A是奇数还是偶数,然后我告诉你A是多少,你可以按上述的计算过程来验证我是否有说谎。
小星:嗯,我想想,假如阿呆你想的A为5,那么:
5+123=128
128^2=16384
D=638 E=638mod12=53
(mod表示除法的求余数)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)