一次性加密方法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。
如何更改CCCrypt
使用的AES模式?
答案 0 :(得分:0)
文档说:
CCCrypt
无状态,一次性加密或解密操作。 这基本上执行CCCrytorCreate()
[sic]的序列,CCCryptorUpdate()
,CCCryptorFinal()
和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
的模式。