Đây là phương pháp của tôi để sử dụng RNCryptor để mã hóa/giải mã chuỗi JSON mà tôi đang gửi tới dịch vụ web. Tôi đang sử dụng một biến tĩnh IV có thể là thực hành xấu nhưng xin đừng tập trung vào đó. Đây là cách tôi đang làm nó:RNCryptor không hoạt động với chuỗi JSON
Lưu ý: Tôi sử dụng loại NSData + Base64 Matt Gallagher đã tìm thấy here (ở dưới cùng của trang)
-(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;
}
Khi tôi sử dụng một chuỗi như hello world
nó hoạt động tốt . Khi tôi sử dụng một chuỗi như {"username":"developer","password":"abcdefG*12"}
Tôi tưởng tượng nó hase cái gì để làm với mã hóa nhưng tôi thực sự biết những gì để sử dụng.
khi tôi mã hóa chuỗi đó, tôi nhận được chuỗi base64 và khi tôi cố gắng giải mã rằng tôi nhận được chuỗi rỗng.
CẬP NHẬT
Dường như nó không vì
Điều đáng tiếc hơn là nó chỉ thất bại với chuỗi có định dạng json, tôi nghĩ đó là nguyên nhân :
trong chuỗi json.
:
tôi đã thử trước tiên nhưng khi điều tra thêm nếu tôi đã phá vỡ bất kỳ yêu cầu nào của ,
'' đang làm việc. Nó hoạt động với các RNEncryptor
tuy nhiên vì vậy tôi không chắc chắn những gì tôi đang làm sai. Dù bằng cách nào, tôi nghĩ rằng chúng tôi có thể thiết kế lại dòng chảy hiện tại
UPDATE 2
Đây là nơi tôi kêu gọi các phương pháp:
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:
Khi bạn nói "Tôi mã hóa chuỗi đó, tôi nhận được chuỗi base64 và khi tôi cố gắng giải mã rằng tôi nhận được giá trị null". bạn có nghĩa là mã hóa và giải mã? từ mã được đăng của bạn, tôi thấy bản rõ của bạn sử dụng mã hóa UTF8 và bản mã của bạn sử dụng Base64 không phải của những người nên có vấn đề với dấu hai chấm. Nếu hàm giải mã của bạn trả về 'null', thì có lẽ giá trị' error' đang được trả về. Giá trị của nó là gì? – jbtule
@jbtule Tôi đã thêm mã nơi tôi sử dụng các phương pháp đó.Tôi đang sử dụng JSONKit để serialize NSDictionary để NSString – mkral
@jbtule và có, tôi có nghĩa là mã hóa/giải mã Tôi đã chỉnh sửa bài đăng – mkral