基于md5的php hmac算法
时间:2009-08-07 来源:hkebao
<?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;
?>
/**
* 基于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;
?>
相关阅读 更多 +