PHP:如何生成字符串的HmacSHA256签名

时间:2010-04-25 11:13:44

标签: php hmac

有没有办法在php中创建字符串的HmacSHA256签名?

4 个答案:

答案 0 :(得分:67)

使用hash_hmac

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

$secret是你的关键。

答案 1 :(得分:12)

hash_hmac()功能可以提供帮助,此处:

  

使用。生成键控哈希值   HMAC方法


例如,以下代码部分:

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

提供以下输出:

string '07a932dd17adc59b49561f33980ec5254688a41f133b8a26e76c611073ade89b' (length=64)


并且,要获取可以使用的散列算法列表,请参阅hash_algos()

答案 2 :(得分:5)

以下是使用 HMAC-SHA-256 致电PSP之前 datatrans交易签名(瑞士电子支付解决方案)的示例。

希望它可以帮助一些开发人员。

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

注意:商家ID和HMAC密钥均来自此处提供的Datatrans文档:https://admin.sandbox.datatrans.com/showcase/doc/Technical_Implementation_Guide.pdf

答案 3 :(得分:0)

由于缺乏声誉,我无法回答,但是@Melomans方式与ZPiDER的回答相结合只能使用

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

获取正确的Datatrans签名