使用HMAC-SHA1签名方法详解

yipeiwu_com5年前PHP代码库
加密算法:
使用HMAC-SHA1签名方法
复制代码 代码如下:

    /**
     * @brief 使用HMAC-SHA1算法生成oauth_signature签名值
     *
     * @param $key  密钥
     * @param $str  源串
     *
     * @return 签名值
     */
    function getSignature($str, $key) {
        $signature = "";
        if (function_exists('hash_hmac')) {
            $signature = base64_encode(hash_hmac("sha1", $str, $key, true));
        } else {
            $blocksize = 64;
            $hashfunc = 'sha1';
            if (strlen($key) > $blocksize) {
                $key = pack('H*', $hashfunc($key));
            }
            $key = str_pad($key, $blocksize, chr(0x00));
            $ipad = str_repeat(chr(0x36), $blocksize);
            $opad = str_repeat(chr(0x5c), $blocksize);
            $hmac = pack(
                    'H*', $hashfunc(
                            ($key ^ $opad) . pack(
                                    'H*', $hashfunc(
                                            ($key ^ $ipad) . $str
                                    )
                            )
                    )
            );
            $signature = base64_encode($hmac);
        }
        return $signature;
    }

相关文章

浅析php中jsonp的跨域实例

我们现在www.test.com这个域名下面有这么个html文件testjsonp.html:复制代码 代码如下:<!DOCTYPE html PUBLIC "-//W3C//DT...

PHP中isset与array_key_exists的区别实例分析

本文实例讲述了PHP中isset与array_key_exists的区别。分享给大家供大家参考。具体分析如下: 1.对于数组值的判断不同,对于值为null或''或false,isset返...

PHP中for与foreach的区别分析

注意: 除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。因此数组指针不会被 each() 结构改变,对返回的数组单元的修改也不会影响原数组。 1. 自p...

PHP基础知识介绍

php中的整形数是有符号的,不能表示无符号整数,当整形数超出范围时,会自动从整形数转化成float数,可以用php_int_size常量来查看php整数类型所占字节,一般为4个字节,所以...

PHP操作Redis常用技巧总结

本文实例讲述了PHP操作Redis常用技巧。分享给大家供大家参考,具体如下: 一、Redis连接与认证 //连接参数:ip、端口、连接超时时间,连接成功返回true,否则返回fals...