macos - PyCrypto 在 CFB 模式下与 CommonCrypto 的兼容性?

标签 macos encryption aes pycrypto commoncrypto

我正在尝试获取一些 python 代码来解密使用 OS X CommonCrypto API 加密的数据。几乎没有关于 CommonCrypto 使用的确切选项的文档,因此我需要一些帮助来确定在 PyCrypto 中设置哪些选项。

具体来说,我的 CommonCrypto 解密设置调用是:

CCCryptorCreateWithMode(kCCDecrypt, kCCModeCFB, kCCAlgorithmAES128, ccDefaultPadding, NULL, key, keyLength, NULL, 0, 0, 0, &mAESKey);

我的主要问题是:

  1. 由于同时存在 kCCModeCFB 和 kCCModeCFB8,CommonCrypto 对 CFB 模式的定义是什么 - 段大小等?
  2. CommonCrypto AES128 使用的 block 大小是多少? 16 还是 128?
  3. 什么是默认填充,它在 CFB 模式下重要吗?

目前,只要我将 segment_size 设置为 16*,前 4 个字节的数据就可以使用 PyCrypto 成功解密。

想法?

最佳答案

在不知道 CommonCrypto 或 PyCrypto 的情况下,一些部分答案:

  • AES(在所有三种变体中)的 block 大小为 128 位,即 16 个字节。

  • CFB(密码反馈模式)实际上也可以在没有填充的情况下工作(即使用部分最后一个 block ),因为对于每个 block 密文创建为明文与某个 key 流 block 的 XOR,这仅取决于先前的 block 。 (您仍然可以使用任何您想要的填充。)

    如果您可以用一些已知数据进行试验,请先查看密文大小。如果它不是 a 的倍数 完整 block (和明文+IV一样),那么很可能没有填充。

    否则,用noPadding模式解密,看看结果,并与已知的不同填充模式进行比较。

    来自glance at the source code ,它可能是 PKCS#5-padding。

  • CFB8 是 CFB 的一种变体,它仅使用每个 block 密码调用输出的前 8 位(= 一个字节)(采用 前 128 位(= 16 字节)的密文(或 IV)作为输入)。这需要 16 倍的分组密码调用,但是 允许部分发送流,而不必担心 block 边界。

  • CFB 的另一个定义包括段大小 - 这里的段大小是 从每个密码输出中使用的位(或字节)。在此定义中,“普通”CFB 的段大小为 128 位(= 16 字节),CFB8 的段大小为 8 位(一个字节)。

关于macos - PyCrypto 在 CFB 模式下与 CommonCrypto 的兼容性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8608731/

相关文章:

PHP - 从 Node.js 解密加密字符串

java - 如何在 Java 中生成一次 key 并在 2 个不同的程序中使用该 key

java - 为什么解密后的数据与使用java加密的原始数据不同?

c++ - 在 Mac OS X 10.7.2 上用 C++ 编译基本的 CGAL 程序

java - 在 mac 上的 JFrame 上画一个矩形

python - 使用 Python 多处理进行通信时 OSX 和 Linux 之间的性能差异

ios - 崩溃 : AES128 encryption in iOS 10 using Swift 2. 1

ruby - -bash :/usr/local/bin/pod:/System/Library/Frameworks/Ruby. framework/Versions/2.0/usr/bin/ruby:错误的解释器:没有这样的文件或目录

php - crypt() 函数的最大输出

ssl - 如果我使用 RC4 SSL 密码套件,拦截 TCP/IP 流量是否容易?