-1
我正在嘗試使用Python和Flask與Sagepay進行表單集成。該方法的Python使用PKCS#5填充AES MODE_CBC填充
部分是執行以下操作:
地穴領域
- 地穴字段應包含以純文本的所有其他交易信息作爲名稱=值字段由'分隔&'字符。確保所有必填字段都存在,並且'&'字符後沒有空格。
- 然後使用AES(塊大小爲128位)在CBC模式下使用PKCS#5填充使用提供的密碼作爲密鑰和初始化矢量並以十六進制編碼結果(確保字母在大寫)。
- Prependthe'@'signtothebeginningoftheencodedresult.*
我完全被卡住,試圖做到這一點 - 我已經建立了網址爲每這一部分:
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的長度的倍數。
所以。
我試過下面就這個其他堆棧溢出的問題,但:
我不知道IV是什麼!我正確地生成一個隨機ID嗎?重新閱讀顯示使用的關鍵是初始化矢量,我認爲是第四個是
這是正確的過程?
感謝
亞歷
IV應該與加密密碼相同。 –
@RikBlacow - 感謝您提供的信息,我昨晚得到了這個信息(終於!),但仍然在爲這個實際的python掙扎(包括甚至可以使用的庫)! –