哈希算法的理解和应用

我们下面引用一段文字来解释什么是哈希算法:

哈希是一种加密算法

哈希函数(Hash Function),也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值(Hash Value)、杂凑值或者消息摘要(Message Digest)。它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。

它的函数表达式为:h=H(m)

无论输入是什么数字格式、文件有多大,输出都是固定长度的比特串。以比特币使用的Sh256算法为例,无论输入是什么数据文件,输出就是256bit。

该段文字出处:https://www.sohu.com/a/232586831_100078137

Sh256算法是一种哈希算法,我们不太了解,那么我们是否可以自己写一套算法,答案是可以的,只要符合哈希算法的特点:

1、哈希值固定,任何一个任意长度的消息通过哈希算法计算后都会都会产生一个固定的哈希值,该哈希值和输出的消息一一对应,输出消息出现任何改动都会导致哈希值变动。

2、计算过程不可逆,只能从输入消息到哈希值,而不能从哈希值逆推计算出输入消息。

只要满足这两个特点,这套算法就是哈希算法,当然,优秀的哈希算法必须满足一下条件:

1、快速计算,必须能够根据输入的消息快速计算出哈希值,无论该消息长度多少。

2、哈希值长度短且固定,一把钥匙必须足够轻便。

3、抗碰撞性,这个很好理解,举个例子,我有一把锁,交给锁匠,锁匠根据我的锁形状配备了一把唯一的钥匙,这把锁只能通过这把钥匙打开。有一天,一个小偷,拿了一把形状相似的锁交给锁匠,这个锁匠不够精明,同样配备了一把和我的一样的钥匙,然后这个小偷拿着钥匙开了我家的门……以上的过程就是一种碰撞。哈希算法必须足够“精明”,能够分辨出不同是锁的最细微之处。

那么,哈希算法的应用场景有哪些呢?

1、哈希算法在密码学中的应用。

由于哈希算法的不可逆性和抗碰撞性,哈希算法成为密码学中最常用的加密方式。目前常用的加密算法如:MD4、MD5、SHA-1、SHA-2等都是典型的加密哈希算法。

当我们需要使用用户名密码进行登录认证时,服务器端不需要存储密码这种明文,只需要存储加密算法计算过的密文,服务器在认证时只需要将明文经过加密后和存储好的密文进行对照。这样的话密码泄露的风险只能存在于用户,不会出现所谓的破解和拦截等泄密情况。

2、哈希算法进行文件校验

最常用的场景是当我们下载一个文件时,我们想要通过传统方式如验证文件长度或者大小等方式来判断文件已经全部下载就会很困难,而通过哈希算法的方式,下载文件前先获取该文件的哈希值,下载完成后比对文件的哈希值,如果一致,则说明文件已经全部下载完毕。

3、哈希算法在数字签名中的应用

因为哈希算法的唯一性,哈希算法在数字签名中的应用也很广泛。

4、哈希算法在数据存储和检索方面的应用

我们试想一下,当我们想要在新华字典上查找一个字,比如“张”,我们会怎么做?

最笨的方式就是一页一页的去翻开对比,直到找到记载有“张”字的那页为止。如果人为去找的话,估计需要几个小时甚至更长的时间,这个过程抽象到编码上就是通过遍历一个一个去比对,效率可想而知。

为了能快速查找,字典设计人员为字典设计了目录,我们可以通过偏旁或者拼音,先找到“张”字在哪一页,然后就可以直接翻到这一页。是不是效率提升很多。

从算法的角度来说,我们通过偏旁或者拼音查找的过程就是哈希算法,而和“张”对应的页数比如845就是哈希值。

简化过程如下:

X=f(M)=f(“张”)=845

如果输入“章”,X= f(“章”)=845,说明这种算法发生了碰撞。好在字典不需要超强的抗碰撞性,否则的话就需要为每一个字单独开一页,那得多少页。

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值