密码学-数据完整性-单向散列函数md5
简介
完整性用来确保信息没有被修改,也可以防止假冒的信息。
目前数据完整性的主要解决方案就是使用单向散列函数和加密算法。单向散列函数能够将一个文件映射成一段小的信息码并且不同文件散列之后的值是不同的。通常将原始文件使用单向散列函数处理得到一段信息码,然后将其加密,和文件一起保存。如果由人改动文件,那么我们在使用这个文件的时候就可以先使用单向散列函数对文件处理,得到信息码,可以和之前的信息码对比,如果没有发生变化说明文件没有被别人改动过,否则被改动过。
单向散列函数:有一个输入和一个输出,其中输入称之为消息,输出称之为散列值或消息码,单向散列函数也称之为哈希函数,杂凑函数。
- 这里的信息不一定是文本文件,也可以是视频,声音,单向散列函数不需要知道消息的实际意义,无论任何消息,都会单纯的单作比特处理
- 散列值的长度和消息的长度无关,单向散列函数都会计算出固定长度的散列值。
单向散列函数
单向散列函数的性质:
- 根据任意长度的消息计算出固定长度的散列值
- 能够快速的计算出散列值
- 消息不同散列值也不同,也称之为雪崩效应
- 具备单向性
单向散列函数的实际应用
-
检测软件是否被篡改
- 数字签名
单向散列函数的缺点
单向散列函数能够辨别出篡改,但是无法辨别真伪
例如:假设攻击者A伪装成B向C同时发送了消息和散列值,这时C能够通过单向散列函数检查消息的完整性,但是这只是对A发送的消息进行检查,无法确定这条消息是否正的是B发送的。
MD5(2种使用方式)
方法一:
注意:去掉感叹号,哈希值发生大的变化
注意:hash.Sum里面通常存放nil,存放空“ “和存放nil效果一样
仅限于第一种方式可以使用清空再次使用
方法二:
两种方法优缺点对比