PHP base64_decode在等效Coldfusion代码中不工作



我在PHP中有以下代码:

<?php
$decodedSecret = base64_decode("OWOMg2gnaSx1nukAM6SN2vxedfY1yLPONvcTKbhDv7I");
echo base64_encode(hash_hmac("sha512", "1|2481632|1425387916|GET|/api/transaction/read?spaceId=12&id=1", $decodedSecret, true));
?>

并试图在Coldfusion中翻译成这样:

local.secret = toBase64( 'OWOMg2gnaSx1nukAM6SN2vxedfY1yLPONvcTKbhDv7I' );
local.hmacHex = hmac( '1|2481632|1425387916|GET|/api/transaction/read?spaceId=12&id=1', local.secret, 'HMACSHA512' );
local.base64 = binaryEncode( binaryDecode( local.hmacHex, "hex"), "base64" );

然而,由于某种原因,这不起作用,我怀疑问题出在这部分:

local.secret = toBase64( 'OWOMg2gnaSx1nukAM6SN2vxedfY1yLPONvcTKbhDv7I' );

似乎不等同于以下PHP代码:

$decodedSecret = base64_decode("OWOMg2gnaSx1nukAM6SN2vxedfY1yLPONvcTKbhDv7I");

你知道我在这里可能遗漏了什么吗?

更新:

根据Alex的建议,我使用了下面的代码片段来实现在Coldfusion中复制PHP结果的目标。

local.secret = toBinary( 'OWOMg2gnaSx1nukAM6SN2vxedfY1yLPONvcTKbhDv7I=' );
local.hmacHex = hmac( '1|2481632|1425387916|GET|/api/transaction/read?spaceId=12&id=1', local.secret, 'HMACSHA512', 'utf-8' );
local.strBase64 = toBase64( binaryDecode( local.hmacHex, "hex" ) );

不幸的是,toString(toBinary('OWOMg2gnaSx1nukAM6SN2vxedfY1yLPONvcTKbhDv7I'))没有工作的秘密(这就是为什么我只使用toBinary()),因为hmac将返回一个不同的结果比预期的一个。这可能意味着hmac处理二进制文件和字符串的方式不同,对于那些感兴趣的人来说。

我只是在处理这些东西。如果你想从64进制编码的字符串数据中创建二进制,你需要toBinary()。

<cfset bData = toBinary(form.base64Data) />
<cfcontent variable=bData type="application/pdf" />

我刚刚构建了一个简单的表单来粘贴Base64数据并获取二进制文件。(我知道它是PDF内容,因此MIME类型。)

最新更新