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 パディングを使用し、結果を 16 進数でエンコードする必要があります (文字が大文字であることを確認してください)。 .

  3. エンコードされた結果の先頭に「@」記号を追加します。

この投稿の最後の回答と一緒に。ソートする必要があります。

... パスワード文字列が base64 でエンコードされていないため、結果のキーの長さが小さすぎます。つまり、(16) バイトではなく (12) バイトです。...解決策は、最初に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 に答える