hash算法_HASH算法简介

前段时间和几位计算机专业的粉丝聚餐,聊着聊着聊到了HASH算法。于是请了KK为大家科普一下HASH算法,KK写的知识水平非常高。简单的说,HASH算法的用途之一是防止报道出现偏差

b856660a0f20cd37d042e37e2c464713.png

简介

首先明确一点,这里所谓的HASH算法并不是大学里数据结构里的HASH表算法。这里的HASH算法是密码学的基础。HASH算法,或者叫HASH函数就是将任意长度的数据映射到有限长度的域上。类似于高中所学的函数的定义,就是将任意长度的输入值X,映射到有限长度的输出值Y上的函数。也就是说,无论输入X有多长,其输出值Y为固定长度。(钦定的长度?)目前世界上比较常见的两种是MD5和SHA。

性质

HASH函数最重要的两条性质,就是不可逆和无冲突。所谓不可逆,就是当你知道X的HASH值——也就是上文所提到的Y,无法求出X;所谓无冲突,就是当你知道X1,无法找出另一个X2, 使X1与X2的HASH值相同。

但是,这两条性质在数学上都是不成立的。因为一个函数必然可逆,且由于HASH函数的值域有限,理论上会有无穷多个不同的X值,它们的HASH值都相同。MD5和SHA做到的,是求逆和求冲突在计算上不可能,也就是正向计算很容易,而反向计算即使穷尽人类所有的计算资源都做不到。近几年炒得很火的量子计算机据说有能力可以进行反向计算,暂不予评论。

应用

比如说,我写了一篇文章,摘要是一段话:“把扬州建设成为古代文化与现代文明交相辉映的名城”,并附上这篇文章的摘要(HASH值)是:“7B6673604E03E39ABE8F8D67A7A5C4EC”。如果有人篡改了我的文章,并发表为:“把广州建设成为古代文化与现代文明交相辉映的名城”,我可以立即发现我的文章被篡改过,因为根据“把广州建设成为古代文化与现代文明交相辉映的名城”计算出的摘要不同于原始文章的摘要。这也是现在HASH算法应用最广泛的场景之一了。

这里之所以篡改可以被发现,就是因为摘要函数是一个单向函数,计算Y很容易,但通过d摘要反推X却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。不过上文也有说到,是完全可以通过不同的输入得到相同的输出的,即md5(a) = md5(b)。我们将这种情况称为HASH碰撞。一个好的HASH算法中,应该存在大量不同的数据串,因此碰撞这种情况极其罕见。

HASH算法是密码学的主要算法。现今已经在人们的生活中十分常见。任何允许用户登录的网站都会存储用户登录的用户名和密码。如果以明文保存用户密码,如果数据库泄露,所有用户的口令就落入黑客的手里,并且运维人员是可以访问数据库的,也就是能获取到所有用户的密码。所以正确的做法是保存保存用户密码的摘要,然后将其与数据库中的摘要进行对比,如果一致,就代表密码正确,不一致,就代表密码错误。

我本来想写的通俗一些的,但是我很快发现我已经忘完了。

22ef45948e8c78d2a05a1cfc037aa355.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值