web-dev-qa-db-fra.com

PHP: Comment générer une signature HmacSHA256 d'une chaîne

Existe-t-il un moyen de créer une signature HmacSHA256 d'une chaîne en php?

34
tarnfeld

Utilisation hash_hmac :

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

$secret est votre clé.

La fonction hash_hmac() pourrait aider, ici:

Générer une valeur de hachage à clé à l'aide de la méthode HMAC


Par exemple, la partie suivante du code:

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

Donne la sortie suivante:

string '07a932dd17adc59b49561f33980ec5254688a41f133b8a26e76c611073ade89b' (length=64)


Et, pour obtenir la liste des algorithmes de hachage pouvant être utilisés, voir hash_algos() .

12
Pascal MARTIN

Voici un exemple de signature de transaction de datatrans (solution de paiement électronique suisse) avant d'appeler PSP avec HMAC-SHA- 256 .

J'espère que cela pourrait aider certains développeurs.

$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)); 

Remarque: l'ID marchand et la clé HMAC proviennent tous deux de la documentation Datatrans disponible ici: https://admin.sandbox.datatrans.com/showcase/doc/Technical_Implementation_Guide.pdf =

5
Meloman