Hier sind meine Methoden, RNCryptor zu verwenden, um eine JSON-Zeichenfolge zu verschlüsseln/entschlüsseln, die ich an den Webdienst sende. Ich verwende eine statische IV-Variable, die eine schlechte Übung sein kann, aber bitte konzentrieren Sie sich nicht darauf. Hier ist, wie ich es so mache:RNCryptor arbeitet nicht mit JSON Zeichenfolge
Hinweis: Ich bin mit Matt Gallagher NSData + Base64 Kategorie here gefunden (am Ende der Seite)
-(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;
}
Wenn ich eine Zeichenfolge wie hello world
verwenden, es funktioniert . Wenn ich eine Zeichenfolge wie {"username":"developer","password":"abcdefG*12"}
verwende stelle ich mir vor, dass es etwas mit der Codierung zu tun hat, aber ich weiß wirklich, was zu verwenden ist.
Wenn ich diese Zeichenfolge verschlüsseln bekomme ich eine Base64-Zeichenfolge und wenn ich versuche zu entschlüsseln, bekomme ich eine leere Zeichenfolge.
UPDATE
Es sieht aus wie es wegen der
Was ist seltsamer ist es schlägt nur mit der Zeichenfolge ist in Json-Format, ich dachte, es war die :
im JSON-String versagt wird.
:
Ursache habe ich zuerst versucht, aber bei weiterer Untersuchung, wenn ich eine der JSON-Anforderungen ,
's ' s }
's gestoppt wurde gestoppt Arbeiten. Es funktioniert mit der RNEncryptor
aber so bin ich mir nicht sicher, was ich falsch mache. So oder so, ich denke, wir den Stromfluss neu gestalten kann
UPDATE 2
Hier ist, wo ich diese Methoden nenne:
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:
Wenn Sie sagen: "Ich kodiere diese Zeichenfolge ich bekomme eine Base64-Zeichenfolge und wenn ich versuche zu dekodieren, bekomme ich einen Nullwert." Bedeutst du verschlüsseln und entschlüsseln? Aus Ihrem geposteten Code sehe ich, dass Ihr Klartext die UTF8-Kodierung verwendet und Ihr Chiffretext Base64 verwendet, keiner von diesen sollte Probleme mit Doppelpunkten haben. Wenn Ihre Entschlüsselungsfunktion 'null' zurückgibt, wird wahrscheinlich ein Fehlerwert zurückgegeben. Was ist es wert? – jbtule
@jbtule Ich habe den Code hinzugefügt, wo ich diese Methoden verwende.Ich benutze JSONKit, um das NSDictionary zu NSString – mkral
@jbtule zu serialisieren und ja, ich meine verschlüsseln/entschlüsseln Ich habe den Beitrag bearbeitet – mkral