2014-11-29 2 views
0

У меня возникают проблемы с декодированием строки Base64. Вот относящийся код (в пределах категории файла):Кодирование/декодирование базы 64

- (NSString *)base64DecodedString { 
    NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:self options:0]; 
    NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSASCIIStringEncoding]; 

    NSLog(@"Encoded String: %@\n" 
      "Decoded String: %@\n" 
      "Reencoded Check: %@\n", self, decodedString, [decodedString base64EncodedString]); 

    return decodedString; 
} 

- (NSString*)base64EncodedString { 
    NSData *encodedData = [self dataUsingEncoding:NSASCIIStringEncoding]; 
    NSString *encodedString = [encodedData base64EncodedStringWithOptions:0]; 

    return encodedString; 
} 

Использование NSASCIIStringEncoding, при вызове метода base64DecodedString категории, я получаю следующий результат:

Encoded String: XMEBbbUGO4wuZ8Eljx6x8Q== 
Decoded String: \Ámµ;.gÁ%±ñ 
Reencoded Check: (null) 

Encoded String: NBbA3SzI5j8ioOTeQC5WxNvEFNg0WFy4nRjmCSdypCI= 
Decoded String: 4ÀÝ,Èæ?" äÞ@.VÄÛÄØ4X\¸æ 'r¤" 
Reencoded Check: (null) 

Используя один и тот же код, приведенный выше, но с NSUTF8StringEncoding Я получаю следующий результат:

Encoded String: oP6u7jErDp4KHzC6WmzHEw== 
Decoded String: (null) 
Reencoded Check: (null) 

Encoded String: qjne07HA4PFIFrwTP9E/ejK6XtWoFtbgdDTpL8wmfgY= 
Decoded String: (null) 
Reencoded Check: (null) 

Любые идеи относительно того, что происходит? В любом случае декодированная строка неверна, и проверка перекодирования не создает исходную строку.

+0

Что вы * ожидаете * «расшифрованной строки»? Данные в закодированных строках не выглядят как текст; он не может быть представлен как строка ASCII (или UTF8). – duskwuff

+0

@duskwuff Я использую это как ключ для дешифрования другого файла. Я не уверен, что ключ * предполагается *, но используя результат выше, поскольку ключ не дает допустимого файла. Я успешно расшифровал другой файл, используя известный ключ с той же функцией, поэтому я предполагаю, что генерируемый ключ неверен. Другая возможность заключается в том, что способ шифрования файла изменился. – nmock

+0

@duskwuff, в любом случае, учитывая входной код Base64, мне интересно, как вы его правильно декодируете? – nmock

ответ

-1

Я предлагаю вам попробовать больше NSUTF8StringEncoding. Например:

- (NSString *)base64DecodedString { 
NSString *tempString = @"Here you come"; 
NSData *data = [tempString dataUsingEncoding:NSUTF8StringEncoding]; 
NSString *decodedData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

NSLog(@"Simple String: %@\n" 
     "Decoded String: %@\n" 
     , tempString, decodedData); 
return nil; 

}

В вашем случае [[NSData alloc] initWithBase64EncodedString:self options:0]; возврата ноль (когда я пробовал).. Простой пример: iOS 7: Base64 Encode and Decode NSData and NSString Objects

Надеюсь, что помогло.

+0

Зачем отрицать ответ? –

Смежные вопросы