【问题标题】:Python Encrypt AES MODE_CBC with PKCS#5 PaddingPython 使用 PKCS#5 填充加密 AES MODE_CBC
【发布时间】:2018-06-27 11:52:05
【问题描述】:

我正在尝试使用 Python 和 Flask 与 Sagepay 进行表单集成。

该过程的一部分是执行以下操作:

地穴领域

  1. Crypt 字段应包含所有其他纯文本交易信息,如 Name=Value 字段,以“&”字符分隔。确保所有必填字段都存在,并且“&”字符后没有空格。
  2. 然后应该使用 AES(块大小 128 位)在 CBC 模式下使用提供的密码作为密钥和初始化向量使用 PKCS#5 填充来加密此字符串,并将结果编码为十六进制(确保字母在大写)。
  3. 在编码结果的开头添加“@”符号。*

我完全坚持尝试这样做 - 我已经按照这部分构建了 url:

VendorTxCode=TxCode-1310917599-223087284&Amount=36.95&Currency=GBP&Description=description&CustomerName=Fname Surname&CustomerEMail=customer@example.com&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的倍数。

所以。

我已经尝试过关注其他堆栈溢出问题,但是:

  1. 我不知道 IV 是什么!我在生成随机 id 时是否正确?重新阅读节目以使用密钥是我认为是 IV 的初始化向量

  2. 这是正确的过程吗?

【问题讨论】:

  • IV应该和加密密码一样
  • @RikBlacow - 感谢您提供的信息,我昨晚做到了这一点(终于!),但仍然为此努力使用实际的 python(包括甚至使用什么库!)

标签: python encryption cryptography opayo


【解决方案1】:

对于任何感兴趣的人,我已经设法让它工作并将生成的课程放在 Github 上。 https://github.com/Bobspadger/sagepay/blob/master/sagepay.py

这将按照 Sagepays 当前的 v3.0 协议规范进行加密和解密。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2018-02-15
    • 1970-01-01
    相关资源
    最近更新 更多