2017-07-12 97 views
0

一次性加密方法CCCrypt的签名是这样的(从CommonCryptor.h):参数的如何让CCCrypt在另一种模式下计算AES?

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的用途?

+0

如果您有权访问ECB或CBC,实现其他模式非常容易。唯一的挑战是正确实现每块加密的计数器。 –

+0

@ArtjomB。是的,不,我不会自己去执行加密方法。这样只有厄运和疯狂的谎言。 – Raphael

+0

@zaph - 我希望看到你回答这个问题。你没有基于Apple Common Crypto的加密库吗? – jww

回答

0

文档说:

CCCrypt 无状态的,一次性的加密或解密操作。 这基本上执行CCCrytorCreate() [原文如此], 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的模式。

相关问题