单向散列函数
2016-07-21 20:33
295 查看
1. 简介
Hash函数主要用于完整性校验和提高数字签名的有效性,目前已有很多方案。这些算法都是伪随机函数,任何杂凑值都是等可能的。输出并不以可辨别的方式依赖于输入;在任何输入串中单个比特的变化,将会导致输出比特串中大约一半的比特发生变化。常见单向散列函数(Hash 函数):
MD5(Message Digest Algorithm 5):是 RSA 数据安全公司开发的一种单向散列算法,MD5 被广泛使用,可以用来把不同长度的数据块进行暗码运算成一个 128 位(bits,比特位,16 B,字节)的数值。
SHA(Secure Hash Algorithm)这是一种较新的散列算法,可以对任意长度的数据运算生成一个 160 位(bits,比特位,20 字节)的数值。
SHA-1:160 比特
SHA-2
SHA-256:256 比特
SHA-384:384 比特
SHA-512:512 比特
MAC(Message Authentication Code):消息认证代码,是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息。HMAC(用于消息认证的密钥散列法)就是这种函数的一个例子。
CRC(Cyclic Redundancy Check):循环冗余校验码,CRC 校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段(CRC 并不是严格意义上的散列算法,但它的作用与散列算法大致相同,所以归于此类)。
2. 单向散列函数的性质
单向散列函数(one-way hash function)有一个输入和一个输出,其中:输入称为 message(消息);
输出称为散列值(hash value);
单向散列函数可以根据消息的内容计算出散列值,而散列值就可以用来检查消息的完整性。
散列值的长度与消息的长度无关。单向散列函数都会计算出固定长度的散列值。
以 SHA-1 单向散列函数为例,它所计算出的散列值的长度永远是 160 比特(20 字节)。
只要散列值相等,消息就相等。
消息不同,散列值也不同。
两个不同的消息产生同一个散列值的情况称为碰撞。难以(较低概率)发现碰撞的性质称为抗碰撞性(collision resistance)。密码技术中所使用的单向散列函数都需要具备抗碰撞性。
相关文章推荐
- Codeforces 599B-----思维题
- SVN报错:clean the working copy and then retry the operation
- [shell基础]——cut命令
- 前进
- Android 如何编写基于编译时注解的项目
- Linux下使用addr2line调试程序的方法
- Linux入门(一)-目录和文件系统
- 遇到:无法解析类型 java.lang.CharSequence怎么办?
- 2016年团体程序设计天梯赛-决赛 L2-014. 列车调度 【导弹拦截系统-最长上升子序列nlogn求法】
- 【CodeForces】615A - Bulbs(水)
- listview的优化---viewHolder的封装
- 前端开发必备插件
- Android拍照和获取相册图片
- 暑假集训--训练1 二分搜索
- HDU 1253
- LU分解的实现
- SpringMVC + mybatis结合
- Android 6.0 MT流程
- Quoit Design
- Codeforces 84A Toy Army