0

除了加密之外,我已经成功完成了整个 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>

为了简单起见,我截断了整个内容。

4

1 回答 1

2

我花了3天3夜才弄清楚这一点。请阅读Sage Pay Form Integration and Protocol Guidelines 3.00的第 37 页。

A1.1 地穴字段

  1. Crypt 字段应包含所有其他纯文本交易信息,如 Name=Value 字段,以“&”分隔 人物。确保所有必填字段都存在,并且“&”后没有空格 特点。

  2. 然后应在 CBC 模式下使用 AES(块大小 128 位)加密此字符串,并使用提供的密码作为密钥和初始化向量,使用 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)>
于 2015-07-09T08:45:14.650 回答