Hash散列算法详细解析(一)

Hash散列算法详细解析(一)

作者:冲出宇宙

时间:2005年10月30日

转载请注明作者。

本文详细描述了hash算法的通用模式,在这个基础上对目前作为标准的几种主要hash算法进行了一些分析:md5,ripemd系列,sha系列,tiger以及刚加入到标准不久的whirlpool。给出了部分算法的代码。

1 hash定义

    传统hash函数的定义:一个hash函数满足下列条件:

  • 对于不定长度的输入有一个固定的输出
  • 输出容易计算

    我们目前所说的hash,已经不是传统意义上的普通散列了。按照密码学的定义,hash函数其实就是一个单向函数。一个函数f是单向的,如果f满足:

  • y = f(x)容易计算
  • 在已知y和函数f的情况下,找到满足y = f(x)的x是十分困难的

    简单一点说,单向函数就是后向函数,只能计算以后的值,不能计算以前的值。

    对称加密函数也是单向函数。不同的是,这些单向函数具有陷门。陷门相当于后门一样,知道陷门的人就能够反转单向函数,不知道的人就不能够做到这点。正因为hash函数和加密函数具有一样的性质,所以,它们的设计思路和方法是一致的。下面用一个简单的例子来说明它们之间的联系:

    加密函数E的代码为:

    E(data,key) = data ^ MD5(key);

    对应的解密函数为:

    D(data,key) = data ^ MD5(key);

   如果选择了一个好的加密模式,上面的这对简单的加密/解密函数对也具有极高的安全度。

   本章节的内容大家感兴趣的可以参考以下书籍:

   《密码学基础(英文版)》《现代密码学理论与研究》

2 hash 算法的一般模式

    当前所提出来的hash算法都具有一个一般的模式。其主要计算步骤有3步:

  • 添加数据,使得输入数组的长度是某个数(一般为512)的倍数
  • 对添加的数据进行分组
  • 初始化输出值
  • 根据输出值和分组进行计算,得到一个新的输出值
  • 继续步骤4,直到所有分组都计算完毕
  • 输出输出值

有一个例外的,就是whirlpool算法不需要第3步。下面将对各种标准hash函数进行简单分析,并给出其实现代码。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值