白话讲Hash

本文深入浅出地介绍了Hash的基本概念,强调其定长输出、输入敏感和单向性的特点。通过举例解释了如何使用Hash校验文件完整性,并探讨了防止从Hashcode推测输入内容的重要性。此外,还详细阐述了Hash在数字签名中的应用,包括防伪造、防抵赖和防篡改,以及公私钥加密如何确保签名的安全性。


hashcode 每个人都不陌生,我从接触计算机就开始听说这个名词,但是对其理解,其实一直限于知道有这个东西,大体上是干嘛的,从来没有细致的去思考过它存在的意义。直到研究一个加密 IM 的项目,去思考和学习加密相关的知识,对 hashcode 才慢慢熟悉起来,对其相关的知识也有了一些了解。本篇主要讲自己在接触 hashcode 过程中的一些感悟和思考。秉承习惯,用白话来描述,尽量避免专业词汇。

Hash 是什么(不同输入,定长输出)

先把 hash 作为一个函数来说:hash 函数是对输入数据,输出一个定长的编号,就是输入的可能是一个视频文件,可能是图片,可能是 text 文本,也可能是一个字母 a,b,c 。不管输入是什么,输入的根本都是二进制的 0和1 的一个序列。无论输入的 0 和1 的序列是怎样的顺序,多长,经过 hash 函数计算都会输出一个定长的编号。而这个编号就称为 hashcode。
我的理解是:互联网庞杂的数据需要管理,所以需要对其编号,每个文件都有一串定长的数与之对应起来。相当于给每个人一个身份证号码。既然是类似身份证号码,所以要保证不能有两个人拥有同一个身份证号码吧。所以 hash 函数要保证两个不同的输入,输出的编号也是不一样的。即不同的输入,经过 hash 函数计算产生不同的 hashcode。(由于工程实现一一对应比较困难,可能存在不同输入,产生相同的 hashcode ,这种现象叫碰撞,好的 hash 函数应该把碰撞概率尽可能的降低)

hashcode 校验文件完整性(输入敏感)

由上面的条件,可以做到对输入数据进行编号,我们可以 hashcode 来作为一个文件的 id。通常称 hashcode 为一个文件的指纹。即这个指纹就代表是这个文件。如果文件被改动,那文件也就变为另外一个 0 和 1的序列,那它的 hashcode 也应该被改变,才能符合我们上面说的一个文件对应一个 hashcode 的情况。为了强化这种改变,hash 函数一般应该设计为对输入敏感,即输入微小改动会引起输出的 hashcode 面目全非,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值