将AES代码从M2Crypto移植到pycrypto

时间:2013-01-16 10:41:49

标签: encryption aes pycrypto m2crypto

我想将一些现有的AES代码从M2Crypto转换为等效的pycrypto,但文档很薄,特别是对于M2Crypto。我已将相关代码缩减为gist。主要问题是:

  • Pycrypto要求输入长度为16的倍数,而m2crypto则不是。
  • 即使输入长度是16的倍数,密文也会不同。在尝试使用M2Crypto密码参数后,事实证明将paddingkey_as_bytes设置为false会加密到与pycrypto相同的密文。所以我需要在纯python中模仿padding=Truekey_as_bytes=True

非常感谢任何帮助。

编辑:已解决 - 要点已经更新了相应的M2Crypto / pycrypto代码和测试,我将留在那里以防万一有人发现它有用。

1 个答案:

答案 0 :(得分:2)

您必须实施PKCS#7填充/取消填充,这在RSA实验室的公开标准中是简单的,并且当然在维基百科上。另见这个答案:

AES 256 Encryption with PyCrypto using CBC mode - any weaknesses?

请注意,PKCS#7填充和PKCS#5填充是相同的,尽管后者仅正式用于8字节分组密码(例如DES / TDEA)。 OpenSSL默认使用PKCS#7填充。