gpt4 book ai didi

php - Coldfusion pack(H*当量

转载 作者:可可西里 更新时间:2023-11-01 00:56:27 24 4
gpt4 key购买 nike

我正在尝试在 coldfusion 中模拟 php 函数。以下的 Php 输出;

<?php echo (strtoupper(hash_hmac('SHA256', 'a cow jumps over the moom', pack('H*','specialkey')))); ?>

结果 E9C9E66592306F1BD27A3B1991C7650D4A8920D10E5FFDA955DA692225793F35

在CF中尝试时

<cfset z=hmac("a cow jumps over the moom", "specialkey","HMACSHA256")>

结果是 1A905E37DC5F7544E170FB2D47743417AFC7CC0CE53188F30E78BC09D3A61ADF

明显是和pack(H*部分有关,好像我跑

<?php echo (strtoupper(hash_hmac('SHA256', 'a cow jumps over the moom', 'specialkey'))); ?>

结果是1A905E37DC5F7544E170FB2D47743417AFC7CC0CE53188F30E78BC09D3A61ADF

如何在 php 中模拟 pack(H*?我需要在 CF 中返回结果 E9C9E66592306F1BD27A3B1991C7650D4A8920D10E5FFDA955DA692225793F35

最佳答案

虽然看起来双方都在使用相同的 key ,但实际上并非如此。

为了生成 HMAC,PHP 和 CF 都必须首先将值解码为二进制,而该值就是实际用作“键”的值。您得到不同结果的原因是双方对键值的解码方式不同:PHP 从 hexadecimal 对其进行解码。和 CF 作为使用 JVM 默认值(即 UTF-8、ASCII 等)的纯字符串。结果,PHP 和 CF 生成了完全不同的 key ,这就是 HMAC 代码不匹配的原因。

话虽如此,我注意到您的键值“specialkey”实际上不是有效的十六进制字符串。因此,在您花大量时间讨论此问题之前,我的问题是 PHP 代码真的使用了诸如“specialkey”之类的任意字符串,还是仅用于测试目的?如果实际代码使用有效的十六进制字符串,则只需将 binary key 传递给 CF 的 HMAC 函数,结果应该是相同的:

冷聚变:

writeOutput( hmac("a cow jumps over the moom"
, binaryDecode("7370656369616c6b6579", "hex")
, "HMACSHA256"));

PHP:

echo (strtoupper(hash_hmac('SHA256', 'a cow jumps over the moom', pack('H*','7370656369616c6b6579'))));

结果:

1A905E37DC5F7544E170FB2D47743417AFC7CC0CE53188F30E78BC09D3A61ADF

更新:如果出于某种原因您确实需要使用任意字符串作为键,请查看 Perl docs for pack (PHP 函数基于此)。

免责声明:我不是真正的 PHP 专家,所以还有更多内容,但是......本质上 pack(H*) 将您的 key 字符串分成字符对并解释它们作为十六进制。 “s”、“p”、“i”等无效字符被转换为 null 或 0:

  sp   --> 00  ("s" and "p" are invalid)
ec --> EC ("e" and "c" are valid hex)
ia --> 0A ("i" is invalid, "a" is valid)
lk --> 00 ("l" and "k" are both invalid)
ey --> E0 ("e" is valid, "y" is invalid)

生成的二进制文件是这样的(十六进制):

00 EC 0A 00 E0

如果您将该十六进制字符串解码回二进制并将其用作 key :

hmac("a cow jumps over the moom", binaryDecode("00EC0A00E0", "hex"), "HMACSHA256")

CF 返回与 PHP 相同的结果:

E9C9E66592306F1BD27A3B1991C7650D4A8920D10E5FFDA955DA692225793F35

关于php - Coldfusion pack(H*当量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41451976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com