Хэш в coldfusion для безопасного платежного шлюза

Я пытаюсь создать хэш-пароль в 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>

person matthew    schedule 19.03.2013    source источник
comment
Если вы пытаетесь сопоставить хэш из ColdFusion и PHP, см. этот пост - хэш-функция, которая одинаково работает на ColdFusion MX7 и PHP 5.x? .   -  person Miguel-F    schedule 19.03.2013


Ответы (2)


Я считаю, что ссылка, опубликованная Мигелем-Ф, решит вашу проблему. Хэш-вывод Coldfusion написан в верхнем регистре, тогда как большинство (все?) других выходных данных, которые я видел, написаны в нижнем регистре. В зависимости от того, как ваш шлюз обрабатывает чувствительность к регистру, вы должны попробовать передать хэш в нижнем регистре.

<cfset sitesecurity = lCase(hash("test_site1234GBP"&OrderTotal&URL.ThisOrderID&"PASSWORD", "SHA-256"))>  
person Travis    schedule 19.03.2013
comment
УРА!!! Это была проблема со строчными буквами, спасибо, Трэвис, и неравнодушен к MiguelF и Matt B. - person matthew; 19.03.2013

Код должен был работать так, как есть, но, на мой взгляд, лучше создать значение для хеширования в виде одной большой строки. Добавление к строкам «затратно», потому что каждый раз, когда вы добавляете к строке, создается новая строка, а старая уничтожается. Если вы обрабатываете одну транзакцию в минуту, вы никогда не заметите разницы, но в любом случае это хорошая практика. Я хотел бы использовать.

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

Теперь у вас может возникнуть проблема с получением HASH в PHP для соответствия HASH в ColdFusion, но это отдельная проблема.

Образец

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

Возвращает

92A14E1D03833CB3FD6932A8E240861CDEC66E46723A544DFBC3C592D5EE7E66
person Matt Busche    schedule 19.03.2013
comment
спасибо! попробовал это, но значения двойного хеша, найденные в «OrderTotal##URL.ThisOrder», вызывают недопустимую ошибку cfml - person matthew; 19.03.2013
comment
можешь опубликовать ошибку? Это действительный CFML с использованием CF10. Я разместил рабочий пример в своем ответе. - person Matt Busche; 19.03.2013
comment
Мэтт, моя ошибка, это сработало, я пропустил цитату. Благодарю вас! Это расстраивает, хотя наш безопасный платежный шлюз по-прежнему не принимает хеш. - person matthew; 19.03.2013
comment
Вы можете вывести два созданных хэша? PHP, вероятно, возвращает нижний регистр и верхний регистр ColdFusion. Надеюсь, это единственная разница. Вы можете исправить это, используя lcase() в хэше ColdFusion. - person Matt Busche; 19.03.2013
comment
Спасибо, Мэтт, да, действительно, вывод в нижнем регистре был там, где все пошло наперекосяк. Мне нравится это место! - person matthew; 19.03.2013