1

iphone での AES 暗号化に関する以前に対処したヒントを使用しました。

    NSString *mystr= [[self encryptString:[message valueForKey:@"message"] withKey:@"password"] hexadecimalString];
    NSData *mydata= [self encryptString:[message valueForKey:@"message"] withKey:@"password"];
    NSLog (@"Immediate decrypt data: %@",[self decryptData:mydata withKey:@"password"]);
    NSLog (@"Immediate decrypt string: %@",[self decryptData:[mystr dataUsingEncoding:NSUTF8StringEncoding] withKey:@"password"]);

最初の NSLog は文字列を正しくデコードし、2 番目は null を返します。このクラス内のメソッド:

+ (NSData*) encryptString:(NSString*)plaintext withKey:(NSString*)key {
return [[plaintext dataUsingEncoding:NSUTF8StringEncoding]   AES256EncryptWithKey:key];
}

+ (NSString*) decryptData:(NSData*)ciphertext withKey:(NSString*)key {
return [[NSString alloc] initWithData:[ciphertext AES256DecryptWithKey:key]
                              encoding:NSUTF8StringEncoding] ;
}

および NSData のヘッダー (暗号化)

- (NSData *)AES256EncryptWithKey:(NSString *)key;
- (NSData *)AES256DecryptWithKey:(NSString *)key;
4

1 に答える 1

2

あなたの最初のステップで

NSString *mystr= [[self encryptString:[message valueForKey:@"message"] withKey:@"password"] hexadecimalString];

NSDataメソッドをNSString使用して をに変換しますhexadecimalString。たとえば、暗号化されたデータが の01 02 03場合mystr@"010203".

あなたの最後のステップで

NSLog (@"Immediate decrypt string: %@",[self decryptData:[mystr dataUsingEncoding:NSUTF8StringEncoding] withKey:@"password"]);

で元に変換NSStringします。たとえば、 data に変換されます。NSDatadataUsingEncoding:NSUTF8StringEncoding@"010203"30 31 30 32 30 33

これは 2 つの異なる変換プロセスであるため、正しい結果が得られるとは期待できません。あなたはおそらく次のようなことをするべきです

NSLog (@"Immediate decrypt string: %@",[self decryptData:[mystr dataFromHexadecimal] withKey:@"password"]);

wheredataFromHexadecimalは、16 進文字列を に変換するメソッドですNSData( の逆メソッドhexadecimalString)。

于 2013-04-07T08:26:09.297 に答える