Шифрование поля Crypt с помощью Classic ASP для интеграции формы SagePay

Я всегда получаю ту же ошибку 3045: поле Валюта отсутствует при публикации этой формы:

<form name="frmPay" action="https://test.sagepay.com/gateway/service/vspform-register.vsp" method="POST">
<input type="text" name="VPSProtocol" value="3.00" />
<input type="text" name="TxType" value="PAYMENT" />
<input type="text" name="Vendor" value="myvendor" />    
Crypt:<textarea rows="10" cols="200" name="Crypt"><%=Crypt%></textarea>
<input type="submit" value="Send" />
</form>

Я думаю, что ошибка в шифровании

Может ли кто-нибудь прислать процедуру шифрования для классического ASP?


person Planta    schedule 29.07.2014    source источник
comment
Этот вопрос также жалуется на поле валюты, возможно, стоит посмотреть, что это для PHP, но может помочь отследить проблему .   -  person user692942    schedule 30.07.2014


Ответы (1)


ОБНОВЛЕНИЕ (19 ноября 2014 г.): Полезная ссылка была обнаружена через другой вопрос на эту тему.

https://www.sagepaylabs.com/AES.zip

Файл содержит классический пример ASP того, как реализовать AES (128-битный) с использованием модифицированной версии блочного шифра AES Rijndael, первоначально написанной Филом Фреслом (2001), но модифицированной Мэтом Пеком из Sage Pay для работы со 128-битным шифром. блоки (AES) с заполнением CBC и PKCS#5.

Классический пример ASP содержит два файла

  includes.asp
  rijndael.asp

Требования к интеграции платежной формы Sage очень специфичны.

Из протокол и рекомендации по интеграции форм< /а>

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

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

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

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

Примечание. Для расшифровки используйте ту же процедуру в режиме расшифровки, предварительно удалив знак @.


Пример поля склепа

Используя ключ 55a51621a6648525
Чтобы зашифровать следующий запрос, мы должны получить зашифрованный результат под ним

Пары "ключ-значение"

VendorTxCode=TxCode-1310917599-223087284&Amount=36.95&Currency=GBP
&Description=description&CustomerName=FnameSurname
&[email protected]&BillingSurname=Surname
&BillingFirstnames=Fname&BillingAddress1=BillAddress Line 1
&BillingCity=BillCity&BillingPostCode=W1A 1BL
&BillingCountry=GB&BillingPhone=447933000000&DeliveryFirstnames=Fname
&DeliverySurname=Surname&DeliveryAddress1=BillAddress Line 1
&DeliveryCity=BillCity&DeliveryPostCode=W1A 1BL
&DeliveryCountry=GB&DeliveryPhone=447933000000
&SuccessURL=https://example.com/success&FailureURL=https://example.co/failure

Зашифрованный результат

@2DCD27338114D4C39A14A855702FBAB2EF40BCAC2D76A3ABC0F660A07E9C1C921C2C755BA9B59C39F882FBF6DFED114F23141D94E50A01A665B1E3
1A86C07CA1CD1BB8EF5B6CF2C23D495CD79F9C0F678D61773E7A1AA30AA5B23D56503FC0B52AC0694A8C341263D2C5FE1BAD93BDB94726761E155E9
00448F644AF1F67BE1AC77E852B9D90809A44F258EE9478B6D8C1C4ED58759263E7DBF8871C6592287C0358F36F4EEC326CEDDD440DA2FED8AB35F1B
630A5C6FA671E4D78CC8CACECF9DFDC31D6C5EC8270FB21E297E2C2E14F99A04223EFFD4F00062D440E78A3D2C7140EC8F123D247B75E7482AE98858
DA34D37EDE6D7C69AA74391F559305CF675ADB3615244A107ABBB6AF26E29A2FFA059B12688D90FE09E0DE069325BFF3587A695F5DA36E4B809B69C
C9A37034F166B63B5A62B986F4DA34E9AC9516AFDE70642EC7DAD1AEBA93A1F347D6AC7046E967DCBFE7ACFCEE5DAFC0B29F1765032B3060EBE565C
BD57D092075D15CF12725199C6881605B2E0F105698CE3ADD04361CA9D620C187B90E3F9849445B5C3C0FDF1768BFFD61F97E51316826F4F10E0E3E6
68F0A9F5ED9CCDA6F2C7CC957F12DB48F9041482E3D035E7A91852C404BFA325FED947E71F57B871DFAC6AF4FF29F4513A4A80B2D7ECC9D19D47ED04
FA99CDFC881DFA771E1EA4F3F9B2C5AC673EF3DA2699A309CC8522993A63CB8D45D3CDF09B1DFDC573CD19679B250AD6721450B5042F201670B4645
05DCAEF59E2C67ABACC9AE2EEE793CE191FEBF66B8FAF4204EFFB359246B9C99FB52805C46375FF35140F74707FBC73C7731A28A2C883A

Учет этих требований означает, что вы ограничены в возможностях, доступных в классической среде ASP.

Я бы порекомендовал рассмотреть использование AspEncrypt от Persit Software или единственный другой многообещающий вариант, который я могу найти, это (классическое ASP) шифрование AES, но поскольку я не использовал ни один из этих компонентов, я не могу ручайтесь, насколько они хороши или плохи.


Однако я использовал компоненты Persit раньше во время веб-разработки с использованием Classic ASP и могу сказать, что они всегда работали для меня, поэтому я бы порекомендовал взглянуть и узнать, что вы думаете.

Кажется, он поддерживает необходимое требование, вот пример на основе кода из документации в соответствии с.

<%
Dim CM, Context, Key, Blob, Crypt

Set CM = Server.CreateObject("Persits.CryptoManager")
'AES requires the Microsoft Enhanced RSA and AES Cryptographic Provider.
'Set Context = CM.OpenContext("", True )
Set Context = CM.OpenContextEx( _
  "Microsoft Enhanced RSA and AES Cryptographic Provider", "", True _
)
Set Blob = CM.CreateBlob
Blob.Hex = "Hex Encoded Key given to you by Sage Pay" 'AES-128 Bit Key
'Might need to reverse the bytes which is why the third parameter is set to True.
Set Key = Context.ImportRawKey(Blob, calgAES128, True)

'Make sure padding is set to PKCS#5 and Cipher Mode is set to CBC
'these don't actually need defining because they are the defaults
'according to the documentation, just here for completeness.
Key.Padding = ccpPKCS5
Key.Mode = ccmCBC
Set Blob = Key.EncryptText("your key value pairs")

'Format encrypted field as required by Sage Pay
Crypt = "@" + Blob.Hex
%>

Полезные ссылки

person user692942    schedule 29.07.2014
comment
привет Lankymart, спасибо за вашу помощь, у меня есть эта ошибка Указан неверный тип. в этой строке Set Key = Context.ImportRawKey(Blob, calgAES128) вы можете мне помочь? - person Planta; 30.07.2014
comment
это верно? TextToEncrypt = VendorTxCode=........ Set CM = Server.CreateObject(Persits.CryptoManager) Set Context = CM.OpenContextEx(Microsoft Enhanced RSA and AES Cryptographic Provider, True ) Set Blob = CM.CreateBlob Blob.Hex = 55a51621a6648525 Set Key = Context.ImportRawKey(Blob, calgAES128) Key.Padding = ccpPKCS5 Key.Mode = ccmCBC Set Blob = Key.EncryptText(TextToEncrypt) Crypt = @ + Blob.Hex У меня есть эта ошибка Указаны недопустимые флаги. в строке Set Key = Context.ImportRawKey(Blob, calgAES128) - person Planta; 30.07.2014
comment
Возможно, это поможет? Статья PS01032928 — Указан недопустимый алгоритм/Указаны недопустимые флаги. Код, который я предоставил, является псевдокодом из фрагментов в документации, чтобы соответствовать требованиям, и, как таковой, не тестировался, я просто попытаюсь решить проблемы, которые я боюсь. Если у вас возникли проблемы с постоянными значениями, шаг 3. предлагает добавить ссылку на TypeLib на вашу страницу, лично я бы пошел дальше и предложил добавить ее в верхнюю часть файла global.asa, чтобы она была доступна во всем приложении. - person user692942; 30.07.2014
comment
@user3889418 user3889418 Также, просматривая статьи поддержки, обратите внимание, что они используют Set Key = Context.ImportRawKey(Blob, calgAES128, True), третий набор аргументов, который мы меняем местами (по умолчанию False). - person user692942; 30.07.2014
comment
привет Lankymart, у меня все еще есть ошибка Указан неверный тип. в этой строке Set Key = Context.ImportRawKey(Blob, calgAES128, true). Возможно, Persits.CryptoManager не принимает calgAES128? Как я могу добавить ссылку на TypeLib? - person Planta; 31.07.2014
comment
@user3889418 user3889418 Лучший способ добавить тип ref <!--METADATA TYPE="TypeLib" UUID="{B72DF063-28A4-11D3-BF19-009027438003}"--> — это добавить его в качестве первой строки в ваш файл global.asa (он находится в корне приложения, обычно в корне веб-сайта, но не исключительно). Это будет причиной ошибки Invalid Type Specified, потому что он не может найти ссылку для calgAES128. Чтобы проверить это, попробуйте ввести необработанное значение 26126 вместо константы calgAES128. Если это так, то будет ошибка при следующих постоянных значениях, таких как ccpPKCS5 и ccmCBC. - person user692942; 31.07.2014
comment
@user3889418 Вот хорошая статья о добавлении ссылки на МЕТАДАННЫЕ. - person user692942; 31.07.2014
comment
@user3889418 user3889418 Как у вас дела, ссылка помогла? - person user692942; 05.08.2014
comment
@user3889418 user3889418 Добавьте, что вы добавили ссылку на тип в свой файл global.asa? - person user692942; 28.08.2014
comment
да, у вас есть и пример vb.net? теперь я пытаюсь в vb.net, но у меня нет myRijndael.IV что это? - person Planta; 29.08.2014
comment
@user3889418 user3889418 Не уверен, что это все еще актуально для вас, но другой человек задал похожий вопрос, и данный ответ указывает на полезный ресурс иначе неизвестен, он использует модифицированную версию rijndael.asp для поддержки 128-бит, может быть стоит посмотреть. - person user692942; 19.11.2014
comment
@user3889418 user3889418 Возможно, уже слишком поздно, но был опубликован другой вопрос по той же проблеме, на который есть многообещающий ответ, опубликованный @Пол. Возможно, стоит посмотреть, если вы все еще боретесь. - person user692942; 10.08.2015