单向散列函数
大家都知道指纹是我们一个唯一的存在,每一个指纹都是独一无二的,通过指纹可以判断出属于哪个人,破案中经常用到
在计算机处理的信息中,也会用到指纹,判断两条信息是否一直只要比对指纹是否相同就可以了
单向散列函数:SHA-1,SHA-2,SHA-3等等
注意:hash并不是加密
这个文件是真的吗?
我花了几个月的时间完成了一份系统软件,我保存在公司电脑上,下班回家,第二天,我突然发现电脑被人动过,那我怎么知道我完成的软件有没有被人修改过呢?有没有人操作我的电脑把我的软件修改了?
这样怎么保证我的软件的完整性呢? 这就需要到了单向散列函数
很多人都会想到,我把程序软件复制到u盘中,随身保存就能保证完整性了,但是大家知道,要是软件非常巨大,复制,保存以及比较都非常耗时,要是只保存软件的一个特征就比较方便了
这就是软件的指纹,我们使用一个函数计算出软件的指纹,直接保存这个指纹就可以了,每个软件的指纹都是独一无二的,这样只要对比指纹就知道软件是否被篡改了
计算散列函数值需要一个输入和产生一个输出,输入可以是一个文件,一个视频,一段程序等等,输入不限长度,无论是1bit1m1g,都会计算出固定长度的散列值
比如SHA-256为例,无论输入多少,产生的长度都是256bit(32字节)
这样由于散列值很短,所以很容易处理
单向散列函数的性质
根据任意长度的信息计算固定长度的散列值
快速计算散列值
消息不同散列值不同(ps:现在貌似有不同的消息有相同的散列值)
具备单向性(也就是通过散列值不能反算出消息来)
实际应用
检测软件是否篡改
基于口令的加密(密码+salt后再进行散列计算,存储后可以防止字典攻击)
消息认证码
数字签名
伪随机生成器
一次性口令
具体函数
MD4,MD5(已经不安全)
SHA-1,SHA-256,SHA-3(SHA-1不安全)
解决问题
防篡改