Интеграция формы SagePay V3 с использованием CFML — шифрование AES

Я успешно прошел всю интеграцию FORM, за исключением шифрования.

Версия 3 требует шифрования AES, и я не понимаю, как реализовать этот этап.

Ранее сценарий CFML создавал поле crypt в конце, используя следующее:

//** call to include file to encrypt
crypt = base64Encode (SimpleXor(stuff,EncryptionPassword));

Это вызывало файл функций, который выполнял фактическую работу.

Мне нужна помощь в создании нового сценария в файле function.cfm, а также в том, каким должен быть вызов.

Кто-нибудь может помочь, пожалуйста?

Ваше здоровье

Вот фрагмент кода:

<cfscript>

ThisVendorTxCode = "#sfo_id#";

ThisVendorName = "pivotell";

stuff = "VendorTxCode=" & ThisVendorTxCode & "&";

stuff = stuff & "VendorName=" & ThisVendorName & "&";

</cfscript>

<cfset encryptionKey = generateSecretKey( "AES" ) />

//** call to include file to encrypt

<cfset crypt = encrypt(stuff,encryptionKey,"AES","hex") />

<cfoutput>

<form action="https://test.sagepay.com/gateway/service/vspform-register.vsp" method="post" id="form1" name="form1">

<input type="hidden" name="VPSProtocol" value="3.00">

<input type="hidden" name="TxType" value="PAYMENT">

<input type="hidden" name="Crypt" value="#crypt#">

</form>

</cfoutput>

Я обрезал все для простоты.


person Simon Allen    schedule 22.06.2015    source источник
comment
Добро пожаловать в С.О. Как написано, ваши вопросы слишком широки для переполнения стека и рискуют быть закрытыми. 1) Какой код вы уже пробовали? 2) С какими ошибками вы столкнулись? 3) Вы искали в архивах? На SagePay есть несколько тем, которые могут стать отправной точкой. Кроме того, если для этого API есть общедоступный URL-адрес, не мешало бы указать его выше.   -  person Leigh    schedule 26.06.2015
comment
Примечание: если вы используете ACF, лучше всего также включить тег [coldfusion], чтобы охватить более широкую аудиторию.   -  person Leigh    schedule 26.06.2015
comment
Является ли образец кода здесь полезным? [stackoverflow.com/questions /11854251/ [1]: stackoverflow.com/questions /11854251/   -  person Rik Blacow    schedule 29.06.2015
comment
Это все еще слишком широко. Во-первых, опубликуйте ссылку на API, который вы используете. Нам нужно знать точные характеристики шифрования, которые вам дали. Размер ключа шифрования, режим и то, был ли вам предоставлен ключ и значение iv, - все это важные биты информации, которые вы не предоставили ;-) Во-вторых, вы читали ссылки выше? В одном из них конкретно упоминается SagePage v3, и, не зная больше, я предполагаю, что вы может делать некоторые из тех же ошибок, что и в другой теме.   -  person Leigh    schedule 08.07.2015


Ответы (1)


Мне понадобилось 3 дня и 3 ночи, чтобы понять это. Пожалуйста, прочтите страницу 37 Sage Pay Form Integration и Правила протокола 3.00.

A1.1 Поле склепа

  1. Поле Crypt должно содержать всю остальную информацию о транзакции в виде обычного текста в виде полей Name=Value, разделенных символами «&». Убедитесь, что все обязательные поля присутствуют и что после символа «&» нет пробелов.

  2. Затем эту строку следует зашифровать с помощью AES (размер блока 128 бит) в режиме CBC с дополнением PKCS#5, используя предоставленный пароль в качестве ключа и вектора инициализации, и закодировать результат в шестнадцатеричном формате (убедившись, что буквы в верхнем регистре). .

  3. Добавьте знак «@» в начало закодированного результата.

Вместе с последним ответом на этот пост. Это должно отсортировать его.

... Поскольку ваша строка пароля не закодирована в base64, результирующая длина ключа слишком мала, т.е. (12) вместо (16) байтов. ... Решение состоит в том, чтобы сначала закодировать его в base64 ... Кроме того, параметр iv должен быть двоичным

  <cfset keyIVBytes = charsetDecode(yourKeyString, "utf-8")>
  <cfset base64Key = binaryEncode(keyIVBytes, "base64")>

  <cfset result = encrypt(plainString, base64Key,"AES/CBC/PKCS5Padding", "hex", keyIVBytes)>
person Akos Fortagh    schedule 09.07.2015
comment
Добро пожаловать в С.О. Хотя приведенные выше ссылки содержат ответ, лучше также включить краткое изложение, а не только ссылки. Ответы, содержащие только ссылки, обычно удаляются, поскольку ответы становятся бессмысленными при изменении или разрыве ссылок. - person Leigh; 09.07.2015
comment
Кстати, я не проголосовал за это, но я подозреваю, что за него проголосовали против из-за того, что исходный ответ был связан только со ссылкой. - person Leigh; 09.07.2015