首页 >后端开发 >php教程 >转:HmacMD5算法[php版]

转:HmacMD5算法[php版]

WBOY
WBOY原创
2016-06-23 14:31:571525浏览

PHP代码

function HmacMd5($data,$key)    {        // RFC 2104 HMAC implementation for php.        // Creates an md5 HMAC.        // Eliminates the need to install mhash to compute a HMAC        // Hacked by Lance Rushing(NOTE: Hacked means written)           //需要配置环境支持iconv,否则中文参数不能正常处理        $key = iconv("GB2312","UTF-8",$key);        $data = iconv("GB2312","UTF-8",$data);           $b = 64; // byte length for md5        if (strlen($key) > $b) {            $key = pack("H*",md5($key));        }        $key = str_pad($key, $b, chr(0x00));        $ipad = str_pad('', $b, chr(0x36));        $opad = str_pad('', $b, chr(0x5c));        $k_ipad = $key ^ $ipad ;        $k_opad = $key ^ $opad;           return md5($k_opad . pack("H*",md5($k_ipad . $data)));    }  

HMAC需要一个加密用散列函数(表示为H)和一个密钥K。

假设H是一个将数据块用一个基本的迭代压缩函数来加密的散列函数。

用B来表示数据块的长。(以上说提到的散列函数的分割数据块长B=64),用L来表示散列函数的输出数据长(MD5中L=16,SHA?1中L=20)。

密钥的长度可以是小于等于数据块长的任何正整数值。应用程序中使用的密钥长度若是比B大,则首先用使用散列 
函数H作用于它,然后用H输出的L长度字符串作为在HMAC中实际使用的密钥。

一般情况下,推荐的最小密钥K长度是L长。(与H的输出数据长度相等)。

转自:http://blog.icain.cn/show-199-1.html

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn