一起来认识哈希算法

Posted U赞社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起来认识哈希算法相关的知识,希望对你有一定的参考价值。

哈希,嘻哈,傻傻分不清楚。

说起嘻哈,很多人立马能联想到音乐和高晓攀的嘻哈包袱铺,这个嘻哈给很多人带来了快乐,让人愉悦让人捧腹。

今天要说的哈希可是跟嘻哈完全不是一个世界的概念,它不能给你带来愉悦,却能给你的数据带来安全。

哈希,嘻哈的,说着说着连我自己都快被绕晕了,下面就跟大家一起来认识一下哈希。

对计算机知识一点都不知道的估计都没有听说过哈希这一个名词,而在区块链世界,我们经常听到哈希这一个专业名词,那哈希是什么呢?它有什么特点呢?又有哪些应用呢?

什么是哈希

哈希又称为散列,是将任意长度的数据经过一道计算,转换成特定长度的数据,任意长度的数据可以是文字、文件、密码等。哈希运算是单向的不可逆的。它的输入值是不定长的,输出是固定长度的。

通过定义,可以看到,无论原始数据或文件有多大,其输出值恒定为固定长度,如果位数不够根据算法约定用0补全或者用1补全即可。

需要注意的是这个HASH算法不是大学里数据结构课里那个HASH表的算法。这里的HASH算法是密码学的基础,比较常用的有MD5和SHA

以人的指纹为例子来看一下哈希的特点

哈希的特点

特性1、不可逆性

几乎无法通过Hash的结果推导出原文。

通过一个人,你可以看到他的指纹是什么样的,但是只给你一个指纹,你无法推导出这个人的样子。

特性2、抗篡改性

对于一个数据块,哪怕只改动其一个比特位,其hash值的改动也会非常大。

这个是有Hash的特性决定的,即使是同卵同精的双胞胎,哪怕有一点不一样,他们的指纹也是不一样的。

特性3、无碰撞性

几乎没有可能找到一个y,使得y的Hash值与x的Hash值一样。

类似于特性2,几乎没有哪两个人的指纹是一样的。就好比世界上没有完全一样的树叶一样。

我们可以登录一下这个网址体验一下Hash

http://www.fileformat.info/tool/hash.htm

这个网站我们可以进行哈希运算,可以进行输入字符、二进制和文件的哈希运算。

下方是各种哈希运算方法名称。

可以看到,这里面有我们熟悉的MD5和各种SHA。

比如,我输入“吴哥token”在里面进行计算,最后输出为

SHA-256值

41c5ff8a6344555a99ca89b41f2f08a1017b840b3312c336a4db766b1acee0b4

MD5值

da27fc2e44e53a656a6d206e52a8e356

如下图所示

我对输入值做一个小小的变动,吴哥和token之间加一个空格键盘,即输入“吴哥 token”我们再来看一下哈希值变化。

经过计算后,最后输出值为

SHA-256值

c1b36fef18fd3a09f49aa8976e94cc61c0cd0b3ddec29bbdc03939df1db43975

MD5值

6197f39a9d3d850e35a91cbab1ead329

如下图所示

可以明显的看到,哪怕做微小的了变动,最后的运算结果也是千差万别的。 

基于这一点,可以有效的保证数据的安全。

哈希应用实例

应用场景1、

我们在网站上下载软件,特别是与资金关联的app,为了保证数据没有被篡改,往往会将原文件的MD5值公示出来,用户下载app之后,经过运算所得的MD5值与官方的值一样,说明文件是没有被篡改,反之则说明数据被人被人懂了手脚有问题。

我们登录download.cs.ecitic.com可以看到如下的显示

用户下载app之后,登录哈希运算网站进行运算后,如果MD5值与此值相同,则说明软件是安全没有被篡改的。

应用场景2、

我们通过下图来看一下哈希运算用于密码存储的几个阶段

1、早期的时候,我们登录各种网站,用户名和密码都是明文保存在中央服务器里面,这很容易给黑客以可乘之机额,只要破解服务器,用户名和密码就一览无余了。

2、加入哈希运算进行存储密码之后,黑客即使破解了服务器,看到的只是哈希值,而无法得知用户密码,但是,黑客采用了碰撞技术,将大量常用密码组成进行了哈希运算,将自己的哈希值与服务器的哈希值进行碰撞,当哈希值相同时,黑客依然能够破解密码,此时的哈希运算是单纯的密码进行运算,等于是静态的。黑客经过大量碰撞,依然可以破解密码

3、在用户密码的基础上,网站加入一个随机特定值,而这个特定值,黑客无法得知,这样,黑客进行简单的碰撞就无法实现了,其破解难度呈指数级提高。

当然,道高一尺,魔高一丈,随着计算机技术的发展,数据安全方式也会不断迭代,但是,目前来说,哈希运算已经算是安全等级比较高的了。


以上是关于一起来认识哈希算法的主要内容,如果未能解决你的问题,请参考以下文章

币点学堂:一直挂在嘴边的哈希算法你真的了解吗?

数据结构与算法——哈希函数与哈希表等

算法初级面试题05——哈希函数/表生成多个哈希函数哈希扩容利用哈希分流找出大文件的重复内容设计RandomPool结构布隆过滤器一致性哈希并查集岛问题

区块链词典 | 一文读懂哈希哈希函数和哈希算法

区块链数字签名和哈希算法

基础普及(15):一分钟搞懂哈希以及哈希算法!