2015-06-22 88 views
0

除了加密之外,我已經通過了整個FORM集成。使用CFML進行SagePay V3表格集成 - AES加密

版本3需要AES加密,我不明白如何實現這個階段。

此前,CFML腳本中使用此構建的地穴場結尾:

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

我已經截斷簡單的充分的事。

+0

歡迎S.O.正如你所寫,你的問題[對Stack Overflow來說有點太寬泛](http://stackoverflow.com/help/closed-questions),並且存在被關閉的風險。 1)到目前爲止你已經嘗試了哪些代碼? 2)你遇到了什麼錯誤? 3)你是否搜索檔案?有[SagePay上的幾個線程](http://stackoverflow.com/search?q = [coldfusion] + sagePay)可能會給你一個起點。此外,如果該API有公開網址,則將其包含在上面並不會造成任何傷害。 – Leigh

+0

注意,如果你使用的是ACF,最好還要包含'[coldfusion]'標籤,以吸引更多的觀衆。 – Leigh

+0

這裏的代碼示例是否有用? [http://stackoverflow.com/questions/11854251/coldfusion-encryption-decryption-issue][1] [1]:http://stackoverflow.com/questions/11854251/ coldfusion-encryption-decryption-issue –

回答

2

我花了3天3夜的時間來解決這個問題。 請閱讀Sage Pay Form Integration and Protocol Guidelines 3.00的第37頁。

A1.1的隱窩領域

  1. 地穴字段應該包含所有明文如通過「&」 字符分隔名稱=值字段中的其它事務信息。確保所有必填字段都存在,並且 '&'字符後沒有空格。

  2. 此字符串應然後使用AES進行加密(塊尺寸128位)使用所提供的密碼作爲既 密鑰和初始化向量和結果以十六進制 編碼在CBC模式下使用PKCS#5填充(確保字母大寫)。

  3. 在編碼結果的開頭添加'@'符號。

the last answer on this post

一起。它應該對它進行分類。

...因爲您的密碼字符串不是base64編碼,產生的關鍵 長度太小,即(12)代替(16)個字節。 ...的解決方案是 爲base64編碼它第一...此外,該四參數應該是二進制

<cfset keyIVBytes = charsetDecode(yourKeyString, "utf-8")> 
    <cfset base64Key = binaryEncode(keyIVBytes, "base64")> 

    <cfset result = encrypt(plainString, base64Key,"AES/CBC/PKCS5Padding", "hex", keyIVBytes)> 
+0

歡迎來到S.O.儘管上面的鏈接包含了答案,但最好也包括一個簡要的總結,而不僅僅是鏈接。 [「僅鏈接答案」通常會被刪除](http://stackoverflow.com/help/deleted-answers),因爲當鏈接更改或中斷時答案變得毫無意義。 – Leigh

+0

順便說一句,我沒有投票,但我懷疑它是由於原始答案的鏈接唯一性質而被投票。 – Leigh