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

tar*_*eld 37 php hmac

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

Seb*_*olm 76

用途hash_hmac:

$sig = hash_hmac('sha256', $string, $secret)
Run Code Online (Sandbox Code Playgroud)

$secret你的钥匙在哪里?

  • @usama No.由于哈希函数的本质,会存在冲突.(即两个字符串散列到相同的值.)我建议你研究哈希冲突.该主题太长,无法在评论中涵盖. (4认同)

Pas*_*TIN 13

这个hash_hmac()功能可以帮助,在这里:

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


例如,以下代码部分:

$hash = hash_hmac('sha256', 'hello, world!', 'mykey');
var_dump($hash);
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

string '07a932dd17adc59b49561f33980ec5254688a41f133b8a26e76c611073ade89b' (length=64)
Run Code Online (Sandbox Code Playgroud)


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


Mel*_*man 7

这是使用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)); 
Run Code Online (Sandbox Code Playgroud)

注意:商户ID和HMAC密钥均来自Datatrans文档,可从此处获得:https ://admin.sandbox.datatrans.com/showcase/doc/Technical_Implementation_Guide.pdf