Heim >Backend-Entwicklung >PHP-Tutorial >转:HmacMD5算法[php版]

转:HmacMD5算法[php版]

WBOY
WBOYOriginal
2016-06-23 14:31:571510Durchsuche

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:ubuntu9.04 php配置Nächster Artikel:[PHP]PHPUnit入门之三