2014-09-10 2 views
0

는 여기에서 찾을 : https://github.com/matthiasplappert/Secure-NSUserDefaultsEXC_BAD_ACCESS 내가 보안 - NSUserDefaults 라이브러리를 사용하는 것을 시도하고있다

이 기능은 충돌 내가 라이브러리 사용하여 정수를 해시하려고하면 스테핑 후

- (NSString *)_hashObject:(id)object 
{ 
    if (_secretData == nil) 
    { 
     // Use if statement in case asserts are disabled 
     NSAssert(NO, @"Provide a secret before using any secure writing or reading methods!"); 
     return nil; 
    } 

    // Copy object to make sure it is immutable (thanks Stephen) 
    object = [object copy]; 

    // Archive & hash 
    NSMutableData *archivedData = [[NSKeyedArchiver archivedDataWithRootObject:object] mutableCopy]; 
    [archivedData appendData:_secretData]; 

    if (_deviceIdentifierData != nil) 
     [archivedData appendData:_deviceIdentifierData]; 

    NSString *hash = [self _hashData:archivedData]; 

    return hash; 
} 

을 디버거를 통해 특히,이 선이 원인이라고 표시 :이 방법은 전무를 반환

NSMutableData *archivedData = [[NSKeyedArchiver archivedDataWithRootObject:object] mutableCopy]; 

및 (객체의 주소를 손상하는 B ecomes 0xffffffcc). 실제로 NSKeyedArchiver를 사용한 적이 없으므로 여기서 어떤 일이 일어나고 있는지 잘 모르겠습니다.

답변

0

정수는 Objective-C의 개체가 아닙니다. 객체 인수를 취하는 메소드에는 전달할 수 없습니다.

여기에 NSKeyedArchiver을 사용하는 이유가 명확하지 않습니다. NSMutableData이 필요하면 dataWithBytes:length:

+0

실제로 직접 정수를 NSNumber로 변환 한 다음 hashObject() 메서드에 전달합니다. 나는 [NSMutableData dataWithBytes : object length : malloc_size (object)]를 시도했지만 여전히 nil 반환 값을 얻었고 object도 nil이되었다. – jlanisdev

+0

신경 쓰지 마라. 깨진 라이브러리를 사용하는 대신 해시를 직접 작성하는 것이 더 간단하다고 판단했다. – jlanisdev

관련 문제