zoukankan      html  css  js  c++  java
  • PHP HMAC_SHA1 算法 生成算法签名

    HMAC_SHA1(Hashed Message Authentication Code, Secure Hash Algorithm)是一种安全的基于加密hash函数和共享密钥的消息认证协议。

    它可以有效地防止数据在传输过程中被截获和篡改,维护了数据的完整性、 可靠性和安全性。HMAC_SHA1消息认证机制的成功在于一个加密的hash函数、

    一个加密的随机密钥和一个安全的密钥交换机制。 
    HMAC_SHA1 其实还是一种散列算法,只不过是用密钥来求取摘要值的散列算法。 
    HMAC_SHA1算法在身份验证和数据完整性方面可以得到很好的应用,在目前网络安全也得到较好的实现。

    知识点:

    https://www.php.net/manual/en/function.hash-hmac-algos.php

    hash_hmac_algos

    (PHP 7> = 7.2.0)版本小于7.2报错,注意看手册

    hash_hmac_algos - 返回适用于hash_hmac的已注册散列算法列表

    返回一个数字索引数组,其中包含适用于hash_hmac()的支持散列算法列表

     

    例子

    <?php
    print_r(hash_hmac_algos());

    上面的例子将输出类似于:

    排列
        [0] => md2
        [1] => md4
        [2] => md5
        [3] => sha1
        [4] => sha224
        [5] => sha256
        [6] => sha384
        [7] => sha512 / 224
        [8] => sha512 / 256
        [9] => sha512
        [10] => sha3-224
        [11] => sha3-256
        [12] => sha3-384
        [13] => sha3-512
        [14] => ripemd128
        [15] => ripemd160
        [16] => ripemd256
        [17] => ripemd320
        [18] =>漩涡
        [19] => tiger128,3
        [20] => tiger160,3
        [21] => tiger192,3
        [22] => tiger128,4
        [23] => tiger160,4
        [24] => tiger192,4
        [25] => snefru
        [26] => snefru256
        [27] => gost
        [28] => gost-crypto
        [29] => haval128,3
        [30] => haval160,3
        [31] => haval192,3
        [32] => haval224,3
        [33] => haval256,3
        [34] => haval128,4
        [35] => haval160,4
        [36] => haval192,4
        [37] => haval224,4
        [38] => haval256,4
        [39] => haval128,5
        [40] => haval160,5
        [41] => haval192,5
        [42] => haval224,5
        [43] => haval256,5

    注意

    在PHP 7.2.0之前,获取支持的哈希算法列表的唯一方法是调用hash_algos(),它还返回不适合hash_hmac()的哈希算法

    (PHP 5> = 5.1.2,PHP 7,PECL哈希> = 1.1)

    hash_hmac ( string $algo , string $data , string $key [, bool $raw_output=FALSE ]): string

    参数

    algo

    所选散列算法的名称(即“md5”,“sha256”,“haval160,4”等)。请参阅hash_hmac_algos()以获取支持的算法列表。

    data

    要散列的消息。

    key

    用于生成消息摘要的HMAC变体的共享密钥。

    raw_output

    设置为时TRUE,输出原始二进制数据。 FALSE输出小写的十六进制。

    返回值

    返回包含计算的消息摘要的字符串作为小写的十六进制除非raw_output设置为true,在这种情况下返回消息摘要的原始二进制表示形式未知FALSE返回algo或是非加密哈希函数。

    例:hash_hmac("sha1", $str, $key, true);
    /**
     * @使用HMAC-SHA1算法生成oauth_signature签名值
     *
     * @param $key  密钥
     * @param $str  源串
     *
     * @return 签名值
     */
     
    function get_signature($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) &gt; $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;
  • 相关阅读:
    (转)老话题,权限设计及实现!
    (转)深入理解最强桌面地图控件GMAP.NET 百度地图
    (转)一步一步Asp.Net MVC系列_权限管理设计起始篇
    (转)常见存储过程分页PK赛——简单测试分析常见存储过程分页速度
    (转)正则表达之零宽断言(零宽度正预测先行断言)
    holer实现外网访问本地网站
    ural(Timus) 1039. Anniversary Party
    uva 10308 Roads in the North
    其他OJ 树型DP 技能树(未通过)
    ural(Timus) 1067. Disk Tree
  • 原文地址:https://www.cnblogs.com/yszr/p/10607609.html
Copyright © 2011-2022 走看看