2014-11-29 2 views
0

Base64 문자열을 디코딩하는 데 문제가 있습니다. 다음 (카테고리 파일 내)에 관련된 코드입니다 :Base64 인코딩/디코딩

- (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. 예를 들어 : 귀하의 경우 [[NSData alloc] initWithBase64EncodedString:self options:0]; 반환 전무에서

- (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; 

}

(나는 그것을 시도 할 때).. 간단한 예 : iOS 7: Base64 Encode and Decode NSData and NSString Objects

희망을 바랍니다.

+0

왜 대답을 downvote? –