Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何生成字符串的HmacSHA256签名_Php_Hmac - Fatal编程技术网

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

PHP:如何生成字符串的HmacSHA256签名,php,hmac,Php,Hmac,有没有办法在php中创建字符串的HmacSHA256签名?函数可能会有所帮助,如下所示: 使用 HMAC法 例如,代码的以下部分: $hash = hash_hmac('sha256', 'hello, world!', 'mykey'); var_dump($hash); 提供以下输出: string '07a932dd17adc59b49561f33980ec5254688a41f133b8a26e76c611073ade89b' (length=64) 要获得可使用的哈希算法列表,

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

函数可能会有所帮助,如下所示:

使用 HMAC法


例如,代码的以下部分:

$hash = hash_hmac('sha256', 'hello, world!', 'mykey');
var_dump($hash);
提供以下输出:

string '07a932dd17adc59b49561f33980ec5254688a41f133b8a26e76c611073ade89b' (length=64)

要获得可使用的哈希算法列表,请参阅。

使用:


其中,
$secret
是您的密钥。

这里是一个使用HMAC-SHA-256呼叫PSP之前的数据交易签名(瑞士电子支付解决方案)示例

希望能对一些开发者有所帮助

$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文档:

由于声誉不足,我无法回答,但@Melomans way与ZPiDER的回答结合使用,导致仅使用

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

要获得正确的数据转换签名,

$string中有什么?@MahaDev您想要签名的任何内容。@SebastianPaaskeTørholm将哈希\u hmac将始终生成唯一的字符串…?@usama No。根据哈希函数的本质,将存在冲突。(即两个散列为相同值的字符串)我建议您研究散列冲突。主题太长,无法在评论中涵盖。感谢@SebastianPaaskeTørholm的回答。请您大致解释一下我们如何使其独特。再次感谢。请注意,结尾的bin2hex将产生与Datatrans后端UI中显示的示例不同的结果!嗨,我想在javascript中生成datatrans登录。但我无法做到这一点。“你有任何关于这方面的工作实例吗?”维尼辛格:没有。但是你可以读一下,也许它会帮助你:
$hash       = hash_hmac('sha256', $string, $secret);