【问题标题】:SagePay V3 Form Integration using CFML - AES Encryption使用 CFML - AES 加密的 SagePay V3 表单集成
【发布时间】:2015-07-09 18:57:37
【问题描述】:

除了加密之外,我已经成功完成了整个 FORM 集成。

版本 3 需要 AES 加密,我不明白如何实现这个阶段。

以前,CFML 脚本在末尾使用以下方法构造了 crypt 字段:

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

这称为执行实际工作的函数文件。

我需要的帮助是在 function.cfm 文件中创建一个新脚本以及调用应该是什么。

有人可以帮忙吗?

干杯

这是代码的sn-p:

<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>

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

【问题讨论】:

  • 欢迎来到 S.O.如所写,您的问题是a bit too broad for Stack Overflow,并且有被关闭的风险。 1)到目前为止,您尝试过什么代码? 2)你遇到了什么错误? 3)你搜索过档案吗?有一个few threads on SagePay 可能会给你一个起点。此外,如果该 API 有一个公共 url,将其包含在上面也无妨。
  • 附注,如果您使用 ACF,最好也包含 [coldfusion] 标签,以覆盖更多受众。
  • 这还是太宽泛了。首先,请发布您正在使用的 API 的链接。我们需要知道您获得的确切加密规格。加密“密钥”大小、“模式”以及是否为您提供了“密钥”和“iv”值都是相关的信息——您没有提供的信息;-) 其次,您是否阅读了上面的链接? One of them specifically mentions SagePage v3 在不了解更多信息的情况下,我猜你可能会犯一些与其他线程相同的错误。

标签: encryption coldfusion aes opayo openbd


【解决方案1】:

我花了 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. 将“@”符号添加到编码结果的开头。

the last answer on this post 一起。它应该对其进行排序。

... 由于您的密码字符串不是 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)>

【讨论】:

  • 欢迎来到 S.O.虽然上面的链接包含答案,但最好也包含一个简短的摘要,而不仅仅是链接。 "Link only answers" are usually deleted 因为当链接改变或断开时答案变得毫无意义。
  • 顺便说一句,我没有对此投反对票,但我怀疑由于原始答案的链接性质,它被否决了。
猜你喜欢
  • 2013-11-18
  • 1970-01-01
  • 2016-12-31
  • 2013-05-20
  • 1970-01-01
  • 2013-11-11
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多