哈希值MAC值简介

一、哈希值

        说到哈希值,都知道哈希值是通过哈希函数计算得出的,有时看了一堆介绍哈希值、哈希表、哈希函数的资料,却对哈希值还是一知半解。那么要理解哈希值,就要先明白哈希值的作用是什么,为什么需要哈希值。

        哈希值作用有二,一数据压缩,二数据完整性校验。(个人理解)

        数据压缩,是为了传输方便以及保证数据安全性。像原数据50M,计算出的哈希值只有1K,传1K当然会方便很多。数据安全性是指通过哈希值无法反推出原数据。哈希函数是单向的。这样就保证了其他人虽然获取到哈希值但无法知道原数据是什么,保证了原数据的安全性。
        压缩后的数据并不能“解压缩”,值x通过哈希函数f(x)计算得到哈希值y后,y不能反推得到x。因为为了压缩数据大小,在x计算过程中必定有数据损耗,如某一步骤计算出来的数据会向右偏移4位,低的4位就被舍弃了,如此一来就无法通过计算出的结果反推出原数据了。

        完整性校验,就是校验数据完整性,有没有被别人篡改。举例来讲,就是A要给B发一个重要消息“今晚8点来我家找我”,为了防止中间被别人篡改时间或地点,A会发给B这个消息本身及这个消息的哈希值,B拿到信息后,将信息计算哈希,与A发来的哈希值进行比较,若相同则说明消息未被篡改,若哈希值不同,说明消息被篡改了。

       了解了哈希值两个作用后,你就会明白哈希函数的重要性。并不是随便写一个函数就可以把它叫做哈希函数。它需要有数据压缩的功能,因此它会有一个取值范围。完整性校验就要求哈希函数需要让x的哈希值尽量均匀、随机的散列在这个取值范围内。若不能均匀、随机的散列在取值范围内,会被找出规律,容易找到两个哈希值相同的数据,从而篡改原数据。因此哈希值又被称为散列值。哈希值的安全性就在于哈希函数的复杂度,越复杂越不容易被人破解。

        最后,一句话总结一下,哈希值是通过哈希函数映射到哈希表内。
        哈希值:不能通过哈希值得到原数据。
        哈希函数:需要尽量均匀随机的将数据映射到哈希表。
        哈希表,其实就是一个取值范围。

二、MAC(消息身份验证代码 )
        MAC:Message Authentication Code
        MAC实际上就是带密钥的hash函数。这个秘钥使得MAC值比哈希值多出一个功能:身份验证。
        哈希值可以保证数据的完整性,但你无法确定这个哈希值是不是你预期的人发给你的。你只知道你收到一条消息+它的哈希值,验证通过,但无法保证这个消息和哈希值有没有整体被替换。
        MAC值就可以做身份验证。A和B之间有一共享秘钥,这个秘钥是其他人不知道的,那么这个秘钥参与哈希函数计算过程,俗称加盐,就可以保证我收到这个消息确定是由的A发来的,因为参与哈希计算的秘钥只有A和B知道,其它人无法伪造这条消息的哈希值。
        这就是MAC,消息身份认证码。有身份验证及完整性验证两功能。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值