转:HmacMD5算法[php版]

WBOY
發布: 2016-06-23 14:31:57
原創
1494 人瀏覽過

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

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板