哈希函数(散列函数)详解

哈希函数(散列函数)详解

Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
  1. 哈希函数又称散列函数,杂凑函数,他是一个单向密码体制,即从明文到密文的不可逆映射,只有加密过程没有解密过程,哈希函数可以将任意长度的输入经过变化后得到固定长度的输出,这个固定长度的输出称为原消息的散列或消息映射

  2. 理想的哈希函数可以针对不同的输入得到不同的输出,如果存在两个不同的消息得到了相同的哈希值,那我们称这是一个碰撞

  3. 哈希函数的性质

a) 压缩:对于任意大小的输入x,哈希值的长度很小,并且是固定的长度

b) 易计算性

c) 单向性,单向性也就是通过给定的哈希值得到原文是不可行的,求解哈希函数的逆很困难

d) 抗碰撞性:理想的哈希函数是无碰撞的,但是实际的算法设计中很难做到,有两种抗碰撞性

i.     弱抗碰撞性:对于给定的一个消息,要发现另一个消息使其碰撞在计算上不可行

ii.    强抗碰撞性:对于任意的一对不同的消息,使其碰撞在计算上不可行

e) 高灵敏度:当一个输入位发生变化时,会有一半以上的输出位发生变化

  1. 哈希函数的应用

a) 消息认证:在一个开放的网络中,需要提供一个用来验证消息完整性的服务和机制,即消息认证,这种服务的主要功能是确保收到的消息确实与发送的消息的来源都是真实有效

b) 数字签名:因为非对称加密算法速度较慢,所以在消息摘要上进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的

c) 口令的安全性:仅将口令的哈希值进行保存,进行口令校检的时候仅需比对哈希值即可,即使攻击者获取了口令的哈希值,也无法计算出口令

d) 数据完整性:比较熟悉的校检算法有奇偶校检和循环冗余校检码(CRC),这两种方式并没有抗数据篡改的能力,他们一定程度上能检测并纠正数据传输中的信道误码,但不能防止对数据的而已破坏

你可能感兴趣的:(数据结构)