Chinaunix首页 | 论坛 | 博客
  • 博客访问: 802389
  • 博文数量: 42
  • 博客积分: 10080
  • 博客等级: 上将
  • 技术积分: 1970
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-06 23:06
文章存档

2011年(1)

2010年(7)

2009年(4)

2008年(30)

我的朋友

分类:

2008-04-05 14:36:09

/**
 * 基于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;
?>

阅读(1767) | 评论(0) | 转发(0) |
0

上一篇:发现IE版firebug

下一篇:php 取得唯一id

给主人留下些什么吧!~~