基于SHA-256的HMAC文件校验器
2007-03-15 21:52:58 来源:WEB开发网核心提示: 图一 HMAC的结构图中各符号定义如下:IV =作为HASH函数输入的初始值M=HMAC的消息输入Yi =M的第i个分组,0<=i<=(L-1)b=每一分组所含的位数n=嵌入的HASH函数所产生的HASH码长K=密钥K+ =为使K为b位长而在K左边填充0后所得的结果ipad =
图一 HMAC的结构
图中各符号定义如下:
IV =作为HASH函数输入的初始值
M =HMAC的消息输入
Yi =M的第i个分组,0<=i<=(L-1)
b =每一分组所含的位数
n =嵌入的HASH函数所产生的HASH码长
K =密钥
K+ =为使K为b位长而在K左边填充0后所得的结果
ipad =0x36重复b/8次的结果
opad =0x5c重复b/8次的结果
对于特定的HASH函数,b、n都是固定的,所以在程序的HMAC类中,n被定义为宏Mn,b被定义为Mb,值分别为32和64。由于该结构的效率较低,不利于实用化。于是有人提出了一个HMAC的高效实现方案。
*HMAC的有效实现方案如下:
图二 HMAC的有效实现方案
其中的HASH即为SHA-256。
图中左边所示为预计算,右边为对每条消息的计算。在密钥不变的情况下只需进行一次预计算,以后在产生校验码时就只用到右边的计算了。这样就可以提高效率。
需要说明的是,大家在阅读我写的HMAC的类可能会发现,在每次计算时都进行了左右两边的计算(不论密钥怎样)。这是因为我考虑到个人用户可能会不时地对密钥进行更换,并且应用场合也不对效率有特别的要求。当然这样做并没有体现出HMAC有效实现方案的优点。
另外还有一点就是我对密钥的填充是填充的低位,即密钥右边,这和上述方案有不同(方案上说是要填充在高位,即左边),在此说明,以使大家在看源代码的时候不至于疑惑。
以上有效实现方案在HMac类中现实,HASH函数sha-256在Sha256类中实现。由于这里主要说的是HMAC,sha-256只是作为一个黑盒子,所以不多解释。
- ››基于IP地址的vsftp服务器
- ››基于MySQL 水平分区的优化示例
- ››基于CentOS5的Linux下pptp和openvpn的搭建及配置
- ››基于JavaScript的网页版塔防游戏
- ››基于Android平台 QQ大战360手机游戏爆红
- ››Sharepoint 文档管理系列之归档处理
- ››基于Windows Azure的云计算应用设计
- ››基于AES算法实现对数据的加密
- ››基于SoPC目标板Flash编程设计的创建及应用
- ››基于SolidWarks齿轮机构的运动分析与仿真
- ››基于Windwos Server 2008故障转移群
- ››基于JavaScript的REST客户端框架
更多精彩
赞助商链接