0

一次性加密方法的签名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)

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

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

如何更改 AES 模式CCCrypt使用?

4

1 回答 1

0

文档说:

CCCrypt 无状态的一次性加密或解密操作。这基本上执行了CCCrytorCreate()[sic]、 CCCryptorUpdate()CCCryptorFinal()和的序列CCCryptorRelease()

现在,CCCryptorCreate似乎也不接受模式参数;事实上,我们看到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.

于 2017-07-12T14:41:30.043 回答