如何在 PHP 中将 hmacsha1 密钥设置为十六进制?

ton*_*cks 5 php hmacsha1

我可以使用以下代码成功获取 HMAC SHA1 签名密钥:

echo hash_hmac('sha1','office:fred','AA381AC5E4298C23B3B3333333333333333333');
Run Code Online (Sandbox Code Playgroud)

产生:

5e50e6458b0cdc7ee534967d113a9deffe6740d0
Run Code Online (Sandbox Code Playgroud)

然而,我正在工作的地方却期望这样:

46abe81345b1da2f1a330bba3d6254e110cd9ad8
Run Code Online (Sandbox Code Playgroud)

我尝试了一种在线工具,两者之间的区别似乎在于与我一起工作的人期望获得十六进制类型的签名密钥。

我需要在 PHP 中添加一些内容才能输出 HEX 类型吗?

Mat*_*ndh 5

在将十六进制字符串传递到 hash_hmac 之前,您需要将其转换为二进制数据:

var_dump(hash_hmac("sha1", "office:fred", pack("H*", "AA381AC5E4298C23B3B3333333333333333333")));
Run Code Online (Sandbox Code Playgroud)

输出46abe81345b1da2f1a330bba3d6254e110cd9ad8符合预期。