无法匹配php hash_hmac()和coldfusion hmac()的结果



我正在加密URL并将工作脚本从PHP转换为ColdFusion。我已经完成了95%的工作,但在尝试了StackOverflow上的许多解决方案后,我被困在了这一点上。我的结果还是不匹配。我确认两个脚本上的saltBinkeyBin值是相同的。请看一看。

PHP版本

$saltBin = R�k��E�x^ �O<�-�7J=S�z��� �;
$keyBin = �;B��|� �0U,��h�NS+��.��G���
res = hash_hmac('sha256', $saltBin, $keyBin);
result
39ddcd6156a30fdcebc9fbf5dd59a0ef4f47e27841bbc12ce72b64a0a63c0324

Coldfusion版本

<cfset res = hmac(saltBin,keyBin,"HMACSHA256")>
result
30A658BEB3965C2D7D27A3F717FB6C13B05ED44E8B2A5A7FEBB9B57887CF57A0

我尝试了以下解决方案

ColdFusion等价于PHP hash_hmac

冷融合哈希和hmacSHA256与SHA256的区别

更新:

下面是PHP版本

的缩略版本
$key = '943b421c9eb07c830af81030552c86009268de4e532ba2ee2eab8247c6da0881';
$salt = '520f986b998545b4785e0defbc4f3c1203f22de2374a3d53cb7a7fe9fea309c5';
$keyBin = pack("H*" , $key);
$saltBin = pack("H*" , $salt);
$path = "/rs:fill:300:300:1/g:no/aHR0cDovL2ltZy5leGFtcGxlLmNvbS9wcmV0dHkvaW1hZ2UuanBn.png";
echo hash_hmac('sha256', $saltBin.$path, $keyBin);

Result:7062c2b5786c82de963767de4b0cdbc4e7ed7db2ce7466708bf8a28d8572888b

ColdFusion版本

<cfset key = '943b421c9eb07c830af81030552c86009268de4e532ba2ee2eab8247c6da0881'>
<cfset salt = '520f986b998545b4785e0defbc4f3c1203f22de2374a3d53cb7a7fe9fea309c5'>
<cfset keyBin = binaryDecode(key, 'hex')>  
<cfset keyBin =  toString(keyBin)>
<cfset saltBin = binaryDecode(salt, 'hex')>  
<cfset saltBin =  toString(saltBin)>
<cfset path =  "/rs:fill:300:300:1/g:no/aHR0cDovL2ltZy5leGFtcGxlLmNvbS9wcmV0dHkvaW1hZ2UuanBn.png">
<cfset result = hmac(saltBin&path,keyBin,"HMACSHA256")>
<cfoutput>#result#</cfoutput>

结果:FFA7A526BB464CA1470F309605F1ED63832342B704F8475BFAF26CCD1092603B

有谁能在这方面帮助我吗?谢谢。

saltBin和keyBin的值在两个脚本中是相同的

是的,这些值是相同的,但是被散列的数据不是。这就是为什么结果不匹配。

php代码对salt和path变量的连接的二进制进行散列。为了说明使用一个简单的值:
<表类>数据价值二进制Base64tbody><<tr>盐ab[-85]qw = =路径>123[49岁,50岁,51]MTIz盐+路径n/a(-85年,49岁,50岁,51)qzEyMw = =

最新更新