PythonとFlaskを使用してSagepayとフォーム統合をしようとしています。プロセスのPython Encrpt PKCS#5パディング付きAES MODE_CBC
一部は、次の操作を実行することです:
墓所フィールド
- 墓所フィールドは 'で区切られた名前=値のフィールドとして、プレーンテキスト内の他のすべてのトランザクション情報を含まなければなりません& '文字です。すべての必須フィールドが存在し、 '&'文字の後にスペースがないことを確認してください。
- この文字列は、キーと初期化ベクトルとして提供されたパスワードを使用してPKCS#5のパディングを使用してCBCモードでAES(ブロックサイズ128ビット)を使用して暗号化され、16進数で結果がエンコードされます大文字)。
- Prependthe'@'signtothebeginningoftheencodedresult.*
私はこれをやろうとしていると完全にこだわっている - 私はこの部分ごとにURLを構築しました:
VendorTxCode=TxCode-1310917599-223087284&Amount=36.95&Currency=GBP&Description=description&CustomerName=Fname Surname&[email protected]&BillingSurname=Surname&BillingFirstnames=Fname&BillingAddress1=BillAddress Line 1&BillingCity=BillCity&BillingPostCode=W1A 1BL&BillingCountry=GB&BillingPhone=447933000000&DeliveryFirstnames=Fname&DeliverySurname=Surname&DeliveryAddress1=BillAddress Line 1&DeliveryCity=BillCity&DeliveryPostCode=W1A 1BL&DeliveryCountry=GB&DeliveryPhone=447933000000&SuccessURL=https://example.com/success&FailureURL=https://example.com/failur e
が、今必要PKCS#5パディングを使用してAES MODE_CBCを使用して暗号化します。
PHPのコード例は次のとおりです。
static public function encryptAes($string, $key)
{
// AES encryption, CBC blocking with PKCS5 padding then HEX encoding.
// Add PKCS5 padding to the text to be encypted.
$string = self::addPKCS5Padding($string);
// Perform encryption with PHP's MCRYPT module.
$crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $key);
// Perform hex encoding and return.
return "@" . strtoupper(bin2hex($crypt));
}
私は次のことを試してみた:
from Crypto.Cipher import AES
mycrptobj = AES.new('55a51621a6648525', AES.MODE_CBC, os.urandom(16))
ciphertext = mycryptobj.encrypt('somewords')
しかし、入力文字列の長さが16の倍数である必要があり得ます。
So.
私はこの上の他のスタックオーバーフローに関する質問以下試みたが、しました:
私はIVが何であるかを知りません!ランダムなIDを生成するのは正しいですか?キーを使用する再読みショーは私がIVと仮定する初期化ベクトルです
これは正しいプロセスですか?
興味がある人々のために感謝
アレックス
IVは、暗号化パスワードと同じである必要があります。 –
@RikBlacow - 情報をいただきありがとうございます。私は遠い昨晩(最終的に!)、まだこれについて実際のPythonに苦労しています(使用するライブラリを含む)。 –