Интеграция форм 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>

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

1 ответ

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

А1.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)>
Другие вопросы по тегам