2017-07-12 3 views
0

Die Signatur von One-Shot-Verschlüsselungsmethode CCCrypt ist dies (von CommonCryptor.h):Wie kann ich CCCrypt berechnen AES in einem anderen Modus?

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) 

Keiner der Parameter einen Wert CCMode (vielleicht sneakily, da alle Aufzählungen ganze Zahlen sind?) Zu akzeptieren scheint. Ich habe versucht, es mit dem CCOptions Parameter zu kombinieren, aber ohne Erfolg; Die beiden Enums sind keine Optionen und kombinieren nicht eindeutig.

Es ist nicht explizit dort dokumentiert, aber ich vermute von dem, was ich im Internet finde, dass der mit kCCAlgorithmAES verwendete Modus CBC ist.

Wie kann ich den AES-Modus CCCrypt Anwendungen ändern?

+0

Es ist ziemlich einfach, andere Modi zu implementieren, wenn Sie den Zugriff auf EZB oder CBC haben. Die einzige Herausforderung besteht darin, den Zähler, der für jeden Block verschlüsselt ist, korrekt zu implementieren. –

+0

@ArtjomB. Ja, nein, ich werde nicht herumgehen und Kryptomethoden selbst implementieren. So liegen nur Verhängnis und Wahnsinn. – Raphael

+0

@zaph - Ich habe erwartet, dass Sie diese Antwort bekommen. Haben Sie nicht eine Crypto-Bibliothek, die auf Apple Common Crypto basiert? – jww

Antwort

0

Die Dokumentation sagt:

CCCrypt Stateless, one-shot verschlüsseln oder Betrieb entschlüsseln. Dies führt grundsätzlich eine Sequenz von CCCrytorCreate(), CCCryptorUpdate(), CCCryptorFinal() und CCCryptorRelease().

Nun scheint CCCryptorCreate keinen Modusparameter zu akzeptieren; in der Tat, see wir, dass CBC in der Tat fest einprogrammiert ist (abgesehen von der einen, etwas willkürlich, die uns EZB verwenden können):

/* 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; 

Wenn wir einen anderen Modus wir verwenden CCCryptorCreateWithMode haben verwenden möchten. So scheint es leider nicht möglich zu sein, den Modus von CCCrypt zu ändern.

Verwandte Themen