使用HMAC-SHA1签名方法详解

yipeiwu_com6年前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生成随机数的方法实例分析

通常情况下,当我们要生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度。 复制代码...

phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)

phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)

从多方查找资源并测试终于解决了问题,特记录下。其实如果在安装的时候,正确的安装,就不会出现下面的信息了. 如在Linux下安装,提示密码的时候,输入Root账号的密码就不会出现这个问题了...

学习discuz php 引入文件的方法DISCUZ_ROOT

define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -7));这是discuz中定义论坛安装根目录的一个常量。现在我们就来分析一下这个很...

php通过function_exists检测函数是否存在的方法

本文实例讲述了php通过function_exists检测函数是否存在的方法。分享给大家供大家参考。具体分析如下: php中可以通过function_exists()函数检测另外一个函数...

PHP中foreach循环中使用引用要注意的地方

复制代码 代码如下: foreach ($array as &$row) { $row = explode('/', $row); } foreach ($array as $row)...