59

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

4

5 回答 5

118

使用hash_hmac

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

$secret你的钥匙在哪里。

于 2010-04-25T11:20:24.703 回答
19

hash_hmac()功能可以提供帮助,这里:

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


例如,以下代码部分:

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

给出以下输出:

string '07a932dd17adc59b49561f33980ec5254688a41f133b8a26e76c611073ade89b' (length=64)


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

于 2010-04-25T11:20:24.023 回答
11

这是在使用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 文档:https ://admin.sandbox.datatrans.com/showcase/doc/Technical_Implementation_Guide.pdf

于 2017-12-06T14:38:52.047 回答
1

由于缺乏声誉,我无法回答,但@Melomans 结合 ZPiDER 的回答导致只使用

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

用于正确的 Datatrans 签名

于 2020-02-16T16:59:28.780 回答
0

可以使用 hash_hmach 签署您的数据,您只需执行以下操作

  1. 获取您的密钥
  2. 选择密码模式或方法示例 sha1、sha256 等
  3. 创建一个变量来保存您的加密数据,随意调用它因此代码将如下所示

$signData= hash_hmac("sha256",$dataToBeSigned,$yourSecretKey);

于 2021-10-14T08:51:23.063 回答