2

我正在尝试在coldfusion中创建一个哈希密码,以便我们的安全支付网关接受交易。

不幸的是,支付网关拒绝接受我生成的哈希。

该表单通过交易的所有元素发送,并根据五个不同的字段发送生成的哈希。

在 PHP 中是-:

<?php
echo hash('sha256', '
test_site1234
GBP
OrderTotal
OrderID
PASSWORD
');;
?>

我认为coldfusion中的代码应该是正确的 - :

    <cfset sitesecurity = Hash("test_site1234"&"GBP"&#OrderTotal#&#URL.ThisOrderID#&"PASSWORD", "SHA-256")>

<cfoutput>#sitesecurity#</cfoutput>
4

2 回答 2

4

我相信 Miguel-F 发布的链接将解决您的问题。Coldfusion 的哈希输出全部大写,而我见过的大多数(全部?)其他输出都是小写。根据网关处理区分大小写的方式,您应该尝试传递小写哈希。

<cfset sitesecurity = lCase(hash("test_site1234GBP"&OrderTotal&URL.ThisOrderID&"PASSWORD", "SHA-256"))>  
于 2013-03-19T13:38:39.957 回答
1

代码应该按照它的方式运行,但在我看来,最好将值创建为一个大字符串来散列。附加到字符串是“昂贵的”,因为每次添加到字符串时都会创建一个新字符串,而旧字符串会被销毁。如果您每分钟处理一笔交易,您永远不会注意到差异,但无论哪种方式都是一种很好的做法。我会用。

 <cfset sitesecurity = Hash("test_site1234GBP#OrderTotal##URL.ThisOrderID#PASSWORD", "SHA-256")>

现在您可能会遇到在 PHP 中获取 HASH 以匹配 ColdFusion 中的 HASH 的问题,但这是一个单独的问题。

样本

<cfset OrderTotal = 10>
<cfset url.ThisOrderID = 50>
<cfset sitesecurity = Hash("test_site1234GBP#OrderTotal##URL.ThisOrderID#PASSWORD", "SHA-256")>
<cfdump var="#sitesecurity#" abort>

退货

92A14E1D03833CB3FD6932A8E240861CDEC66E46723A544DFBC3C592D5EE7E66
于 2013-03-19T13:24:14.877 回答