我正在尝试使用somepython代码来解密使用OS X CommonCrypto API加密的数据。关于CommonCrypto使用的确切选项几乎没有文档,所以我需要一些帮助来确定在PyCrypto中设置哪些选项。
具体来说,我的CommonCrypto解密设置调用是:
CCCryptorCreateWithMode(kCCDecrypt, kCCModeCFB, kCCAlgorithmAES128, ccDefaultPadding, NULL, key, keyLength, NULL, 0, 0, 0, &mAESKey);
我的主要问题是:
目前,只要我将segment_size设置为16 *,就可以使用PyCrypto *成功解密前4个字节的数据。
想法?
答案 0 :(得分:1)
不知道CommonCrypto或PyCrypto,有些部分答案:
AES(在所有三种变体中)的块大小为128位,为16字节。
CFB(密码反馈模式)实际上也可以在没有填充的情况下工作(即使用部分最后一个块),因为每个 阻塞密文被创建为具有某个密钥流块的明文的XOR,其仅取决于先前的块。 (你仍然可以使用你想要的任何填充。)
如果您可以尝试一些已知数据,请先查看密文大小。如果它不是a的倍数 完整的块(和明文+ IV相同),很可能没有填充。
否则,使用noPadding模式对其进行解密,查看结果,并与不同的已知填充模式进行比较。
从glance at the source code开始,它可能是PKCS#5-padding。
CFB8是CFB的一种变体,它只使用每个分组密码呼叫输出的前8位(= 1个字节)(取 先前的128位(= 16字节)密文(或IV)作为输入)。这需要16倍的分组密码调用,但是 允许部分发送流而不必担心块边界。
还有另一种CFB定义,其中包含段大小 - 此处段大小为 从每个密码输出使用的位(或字节)。在此定义中,“普通”CFB的段大小为128位(= 16字节),CFB8的段大小为8位(一个字节)。