<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发送加密例程吗?
解决方法
UPDATE (19-Nov-2014): A useful link has come to light through 07000 on this topic.
07001
The file contains Classic ASP example of how to implement AES (128-bit) using a modified version of the AES Rijndael Block Cipher originally written by Phil Fresle (2001) but has been modified by Mat Peck at Sage Pay to run with 128-bit blocks (AES) with CBC and PKCS#5 padding.
The Classic ASP example contains two files
06000
Sage Pay Form Integration要求非常具体.
From 07002
A1.1 The Crypt Field
The Crypt field should contain all the other transaction information (see the next section) in plain text as Name=Value fields
separated by ‘&’ characters. Ensure that all mandatory fields are present and that there are no spaces after the ‘&’ character.This string should then be encrypted using AES(block size 128-bit) in CBC mode with PKCS#5 padding using the provided
password as both the key and initialisation vector and encode the result in hex (making sure the letters are in upper case).Prepend the
@
sign to the beginning of the encoded result.NB : To decrypt use the same procedure in decryption mode,making sure you remove the
@
sign before doing so.
Example Crypt Field
Using the key
55a51621a6648525
To encrypt the following request we should get the encrypted result below itKey Value Pairs
06001
Encrypted Result
06002
考虑到这些要求意味着您对经典ASP环境中可用选项的限制.
我建议看看使用AspEncrypt by Persit Software或我能找到的唯一其他有前途的选项是(Classic ASP) AES Encryption,但由于我没有使用这些组件中的任何一个,我无法保证它们有多好或多坏.
但是我之前在使用经典ASP进行Web开发时使用过Persit组件,并且可以说它们一直对我有用,所以我的建议是看看你的想法.
它确实似乎支持所需的要求,这里是一个示例based on code from the documentation操纵适合.
<% 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 %>
有用的链接
>这个问题似乎是相关的,但对于PHP而不是经典ASP这个问题虽然相似. PHP and Sage Pay.
> Article PS040625142 – Advanced Encryption Standard (AES) Support