PHP HMAC_SHA1 算法 生成算法簽名

HMAC_SHA1(Hashed Message Authentication Code, Secure Hash Algorithm)是一種安全的基於加密hash函數和共享密鑰的消息認證協議。php

它能夠有效地防止數據在傳輸過程當中被截獲和篡改,維護了數據的完整性、 可靠性和安全性。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()的支持散列算法列表spa

 

例子

<?php
print_r(hash_hmac_algos());
.net

上面的例子將輸出相似於:code

排列
    [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;
相關文章
相關標籤/搜索