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

PhpHmac

Php Problem Overview


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

Php Solutions


Solution 1 - Php

Use hash_hmac:

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

Where $secret is your key.

Solution 2 - Php

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().

Solution 3 - Php

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

Solution 4 - Php

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

Solution 5 - Php

okay to sign your data with hash_hmach all you need is to do the following

  1. get your secret key

  2. choose a cipher mode or method example sha1,sha256, etc

  3. create a variable that will hold your encrypted data call it whatever you like Therefore the code will look like this

$signData= hash_hmac("sha256",$dataToBeSigned,$yourSecretKey);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiontarnfeldView Question on Stackoverflow
Solution 1 - PhpSebastian Paaske TørholmView Answer on Stackoverflow
Solution 2 - PhpPascal MARTINView Answer on Stackoverflow
Solution 3 - PhpMelomanView Answer on Stackoverflow
Solution 4 - Php3tl4mView Answer on Stackoverflow
Solution 5 - PhpRAMIN HAMZAView Answer on Stackoverflow