|
<?php /** * 基于md5的加密算法hmac * * md5已经不是那么安全了,多折腾几下吧 * * @param String $data 预加密数据 * @param String $key 密钥 * @return String */ function hmac($data, $key){ if (function_exists('hash_hmac')) { return hash_hmac('md5', $data, $key); }
$key = (strlen($key) > 64) ? pack('H32', 'md5') : str_pad($key, 64, chr(0)); $ipad = substr($key,0, 64) ^ str_repeat(chr(0x36), 64); $opad = substr($key,0, 64) ^ str_repeat(chr(0x5C), 64); return md5($opad.pack('H32', md5($ipad.$data))); }
//--------------------------------------------- //使用例子 function getKey () { $tmp = array_merge(range(0, 9), range('A', 'Z')); $key = ''; for ($i = 0; $i < 16; $i++) { $key .= $tmp[mt_rand(0, 35)]; } return md5($key); }
$password = '123456'; $key = getKey(); // 密钥也可以是验证码md5后 $hmac = hmac($password, $key);
// 把私有密钥和密码分别存如数据库 print $key . "\n"; print $hmac; ?>
|