私のメソッドは、Webサービスに送信するJSON文字列を暗号化/復号化するためにRNCryptorを使用する方法です。私は悪い習慣かもしれない静的なIV変数を使用していますが、それに集中しないでください。 (ページの一番下にある)hereを見つけましたが、私はhello world
のような文字列を使用する場合、それは正常に動作しますRNCryptorがJSON文字列で動作しない
-(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;
}
私はマット・ギャラガーさんのNSData + Base64のカテゴリを使用しています:
注:ここで私はそれをやっている方法です。 {"username":"developer","password":"abcdefG*12"}
のような文字列を使用すると、エンコーディングと何か関係がありますが、実際に何を使用するのか分かります。
私はその文字列を暗号化するときにbase64文字列を取得し、それを解読しようとすると空の文字列が得られます。
UPDATE
、それが原因でJSON文字列で
JSON形式の文字列でしか失敗するのは、:
の失敗ているように見えます。
:
だと思ったのですが、最初に試してみましたが、さらに調査すると、JSON要件のいずれかが破られた場合,
の{
の}
は停止しましたワーキング。しかし、それはRNEncryptor
と一緒に働くので、何が間違っているのか分かりません。
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:
「私はその文字列をエンコードします。私はbase64文字列を取得し、デコードしようとするとnull値を取得します。暗号化と解読を意味していますか?投稿されたコードから、私はあなたの平文がUTF8エンコーディングを使用しているのを見て、あなたの暗号文はBase64を使用していません。復号関数が 'null'を返す場合、おそらく' error'値が返されます。それは何の価値ですか? – jbtule
@jbtule私はそれらのメソッドを使うコードを追加しました。私はJSONKitを使ってNSStringをNSStringにシリアライズしています。 – mkral
@jbtuleとはい、暗号化/復号化を意味しました。投稿を編集しました – mkral