PHP: How can I generate a HmacSHA256 signature of a string
PhpHmacPhp Problem Overview
Is there any way to create a HmacSHA256 signature of a string in php?
Php Solutions
Solution 1 - Php
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
-
get your secret key
-
choose a cipher mode or method example sha1,sha256, etc
-
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);