PHP: How can I generate a HmacSHA256 signature of a string

前端 未结 4 1521
误落风尘
误落风尘 2020-12-08 06:18

Is there any way to create a HmacSHA256 signature of a string in php?

相关标签:
4条回答
  • 2020-12-08 06:52

    Use hash_hmac:

    $sig = hash_hmac('sha256', $string, $secret)
    

    Where $secret is your key.

    0 讨论(0)
  • 2020-12-08 06:57

    The hash_hmac() function could help, here :

    Generate a keyed hash value using the HMAC method


    For example, the following portion of code :

    $hash = hash_hmac('sha256', 'hello, world!', 'mykey');
    var_dump($hash);
    

    Gives the following output :

    string '07a932dd17adc59b49561f33980ec5254688a41f133b8a26e76c611073ade89b' (length=64)
    


    And, to get the list of hashing algorithms that can be used, see hash_algos().

    0 讨论(0)
  • 2020-12-08 06:59

    Here is an example of datatrans transaction signing (swiss e-payment solution) before call PSP with HMAC-SHA-256.

    Hope it could help some developers.

    $hmacKey    = 30911337928580013;
    
    $merchantId = 1100004624;
    $amount     = $total * 100;
    $currency   = 'EUR';
    $refno      = $orderId;
    
    // HMAC Hex to byte
    $secret     = hex2bin("$hmacKey");
    
    // Concat infos
    $string     = $merchantId . $amount. $currency . $refno;
    
    // generate SIGN
    $sign       = bin2hex(hash_hmac('sha256', $string, $secret)); 
    

    Note: the merchant ID and HMAC key are both from Datatrans documentation available here : https://admin.sandbox.datatrans.com/showcase/doc/Technical_Implementation_Guide.pdf

    0 讨论(0)
  • 2020-12-08 07:14

    I can't answer due to lack of reputation, but @Melomans way in combination with ZPiDER's answer leads to using only

    $hash       = hash_hmac('sha256', $string, $secret);
    

    for a correct Datatrans signing

    0 讨论(0)
提交回复
热议问题