la necessità di salvare le informazioni in un formato protetto è sempre più sentita all’interno delle applicazioni per dispositivi mobili. Esistono diversi algoritmi per criptare i dati, tra questi uno che sicuramente può essere definito come standard è l’AES con chiave a 256 bit.
Lo scopo è quello di memorizzare le informazioni in modo tale che solo chi possiede la password possa essere in grado di leggerle.
L’SDK di iOS ci viene incontro mettendoci a disposizione le API CommonCrypto. Inizialmente era necessario includere il relativo framework per adoperarle, dalla versione 3.x è invece sufficiente importare gli header di nostro interesse.
Nel nostro caso è necessario inserire la seguente stringa in testa al file di implementazione:
#import "CommonCrypto/CommonCryptor.h"
Ecco quindi il metodo di interesse per la produzione dei dati criptati:
- (NSMutableData *)encryptData:(NSData *)inputData withKey:(NSString *)key {
// Prepara lo spazio atto a contenere la chiave
char keyPtr[kCCKeySizeAES256 +1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLenght:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
size_t numBytesEncrypted = 0;
NSMutableData *outputData = [NSMutableData dataWithLength:[inputData length]*2]; // Aggiunto per ridondanze dati
CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCkeySizeAES256, NULL, [inputData mutableBytes], [inputData lenght], [outputData mutableBytes], [outputData lenght], &numBytesEncrypted);
return outputData;
}
Vediamo come funziona:
La chiave AES è 32 bytes, allochiamo un vettore di 33 bytes in quanto l’ultimo byte dev’essere 0 per indicare un terminatore. Inizializziamo quindi il vettore a 0 e vi inseriamo dentro la nostra chiave di criptazione tramite il metodo getCString.
Inzializziamo un’istanza di tipo NSMutableData atta a contenere i dati criptati, in questo caso usiamo il metodo dataWithLength raddoppiando la dimensione dei dati originali questo perchè l’encrypting può aumentare la dimensione dei dati generati rispetto agli originali.
Richiamiamo quindi la funzione CCCrypt specificando l’azione, l’algoritmo, il tipo di padding, la chiave e la sua tipologia e quindi dove prendere e restituire i dati.
A questo punto non resta altro da fare che restituire i dati criptati per poi permetterne il salvataggio.
Arrivederci alla prossima tip,
Roberto S.




