转:HmacMD5算法[php版]

WBOY
Libérer: 2016-06-23 14:31:57
original
1502 Les gens l'ont consulté

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

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal