Ecco i metodi per utilizzare RNCryptor per crittografare/decodificare una stringa JSON che sto inviando al servizio web. Sto usando una variabile IV statica che potrebbe essere una cattiva pratica, ma per favore non concentrarsi su questo. Ecco come lo sto facendo:RNCryptor non funziona con la stringa JSON
Nota: sto usando di Matt Gallagher categoria NSData + Base64 trovato here (in fondo alla pagina)
-(NSString*)encryptString:(NSString*)plaintext withKey:(NSString*)key error:(NSError**)error{
NSData *data = [plaintext dataUsingEncoding:NSUTF8StringEncoding];
NSData *encryptionKey = [NSData dataFromBase64String:key];
NSData *IV = [NSData dataFromBase64String:ENCRYPTION_IV];
RNCryptorEngine *engine = [[RNCryptorEngine alloc] initWithOperation:kCCEncrypt settings:kRNCryptorAES256Settings key:encryptionKey IV:IV error:error];
[engine addData:data error:error];
NSData *encryptedData = [engine finishWithError:error];
NSString *based64Encrypted = [encryptedData base64EncodedString];
NSLog(@"Encrytped: %@", based64Encrypted);
return based64Encrypted;
}
-(NSString*) decryptString:(NSString*)cipherText withKey:(NSString*)key error:(NSError**)error;{
NSData *data = [NSData dataFromBase64String:cipherText];
NSData *encryptionKey = [NSData dataFromBase64String:key];
NSData *IV = [NSData dataFromBase64String:ENCRYPTION_IV];
RNCryptorEngine *engine = [[RNCryptorEngine alloc] initWithOperation:kCCDecrypt settings:kRNCryptorAES256Settings key:encryptionKey IV:IV error:error];
[engine addData:data error:error];
NSData *decryptedData = [engine finishWithError:error];
NSString *decryptedString = [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding];
NSLog(@"Decrypted: %@", decryptedString);
return decryptedString;
}
Quando uso una stringa come hello world
funziona benissimo . Quando uso una stringa come {"username":"developer","password":"abcdefG*12"}
immagino che abbia qualcosa a che fare con la codifica, ma so davvero cosa usare.
quando crittografo quella stringa ottengo una stringa base64 e quando provo a decodificare ottengo una stringa vuota.
UPDATE
Sembra come se fosse mancata a causa della
Cosa c'è di strano è fallisce solo con la stringa è in formato JSON, ho pensato che fosse il :
nella stringa JSON.
:
causa ho provato prima, ma dopo ulteriori indagini, se ho rotto uno dei requisiti JSON ,
s 's {
' }
's si è fermato lavoro. Funziona con lo RNEncryptor
tuttavia non sono sicuro di cosa sto facendo male. Ad ogni modo, penso che possiamo ridisegnare il flusso di corrente
UPDATE 2
qui è dove sto chiamando questi metodi:
NSDictionary *credentials = @{@"username":@"developer",@"password":@"abcdefG*12"};
NSString *jsonString = [ credentials JSONStringWithOptions:JKSerializeOptionNone error:&error];
NSLog(@"json string: %@", jsonString); //OUTPUTS: {"username":"developer","password":"abcdefG*12"}
CCGEncryption *encryptionObject = [[CCGEncryption alloc] init]; //THIS IS THE OBJECT WHERE THE encrypt/decrypt methods are
NSString *encrypted = [encryptionObject encryptString:jsonString withKey:ENCRYPTION_KEY error:&error];
if(error){
NSLog(@"Error:%@", error); //NO ERROR
}
NSString *decrypted = [encryptionObject decryptString:encrypted withKey:ENCRYPTION_KEY error:&error];
if(error){
NSLog(@"Error:%@", error); //NO ERROR
}
NSLog(@"decrypted: %@", decrypted); //OUTPUT: decrypted:
Quando si dice "I encode that string ottengo una stringa base64 e quando provo a decodificare ottengo un valore nullo." stai volendo criptare e decifrare? dal tuo codice postato, vedo che il tuo testo normale utilizza la codifica UTF8 e il tuo testo cifrato utilizza Base64 nessuno di questi dovrebbe avere problemi con i due punti. Se la funzione di decrittografia restituisce 'null', allora probabilmente viene restituito un valore' error'. Qual è il suo valore? – jbtule
@jbtule Ho aggiunto il codice dove uso questi metodi.Sto usando JSONKit per serializzare NSDictionary su NSString – mkral
@jbtule e sì, volevo cifrare/decodificare Ho modificato il post – mkral