如何让 CCCrypt 在另一种模式下计算 AES?

How can I make CCCrypt compute AES in another mode?

一次性加密方法CCCrypt的签名是这样的(来自CommonCryptor.h):

CCCryptorStatus CCCrypt(
    CCOperation op,         /* kCCEncrypt, etc. */
    CCAlgorithm alg,        /* kCCAlgorithmAES128, etc. */
    CCOptions options,      /* kCCOptionPKCS7Padding, etc. */
    const void *key,
    size_t keyLength,
    const void *iv,         /* optional initialization vector */
    const void *dataIn,     /* optional per op and alg */
    size_t dataInLength,
    void *dataOut,          /* data RETURNED here */
    size_t dataOutAvailable,
    size_t *dataOutMoved)
参数的

None 似乎接受 CCMode 值(可能是偷偷摸摸的,因为所有枚举都是整数?)。我尝试将它与 CCOptions 参数结合使用,但无济于事;这两个枚举不是选项,不要明确组合。

那里没有明确记录,但我从网上发现的内容推测 kCCAlgorithmAES 使用的模式是 CBC。

如何更改 CCCrypt 使用的 AES 模式?

文档说:

CCCrypt Stateless, one-shot encrypt or decrypt operation. This basically performs a sequence of CCCrytorCreate() [sic], CCCryptorUpdate(), CCCryptorFinal(), and CCCryptorRelease().

现在,CCCryptorCreate 似乎也不接受模式参数;事实上,我们 see CBC 确实是硬编码的(除了允许我们使用 ECB 的那个有点武断):

/* Determine mode from options - old call only supported ECB and CBC 
   we treat RC4 as a "mode" in that it's the only streaming cipher
   currently supported 
*/
if(alg == kCCAlgorithmRC4) mode = kCCModeRC4;
else if(options & kCCOptionECBMode) mode = kCCModeECB;
else mode = kCCModeCBC;

如果我们想使用另一种模式,我们必须使用 CCCryptorCreateWithMode。因此,不幸的是,似乎无法更改 CCCrypt.

的模式