gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:29:40 36 4
gpt4 key购买 nike

我正在尝试获取一些 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/

36 4 0
文章推荐: moovweb - 在 Tritium 中,如何将所有

标签转换为

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com