2010-06-22 4 views
1

N 회 반복으로 SHA256을 사용하여 키를 생성하고 싶습니다.SHA256 키 생성기가 iphone에 있습니다.

그들은 입력 내 "비밀번호" + "임의의 숫자"나는 애플에서 제공하는 암호화 샘플을 보았다하지만 내 요구 사항을 제공하지 않습니다 (또는 가능한 I있을 것 같다

을해야한다 didnt는 그것을 올바르게 얻는다). 나뿐만 아니라 통해 아래 링크를 갈하지만 나던됩니다

이 방법은 몇 가지 힌트를 기다리는 http://iphonedevelopment.blogspot.com/2009/02/strong-encryption-for-cocoa-cocoa-touch.html

SHA256 를 사용하여 키를 생성해야합니다.

감사 애플 포럼에

답변

1

이 시도 당신을 도움이 될 것입니다, 그것은 평면 텍스트 입력

-(NSString*)sha256HashFor:(NSString*)input 
{ 
    const char* str = [input UTF8String]; 
    unsigned char result[CC_SHA256_DIGEST_LENGTH]; 
    CC_SHA256(str, strlen(str), result); 

    NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2]; 
    for(int i = 0; i<CC_SHA256_DIGEST_LENGTH; i++) 
    { 
     [ret appendFormat:@"%02x",result[i]]; 
    } 
    return ret; 
} 

2의 해시를 얻으려면 저

1) 근무) 입력으로 NSData의 해시를 얻으려면

참고 - 나는있는 NSData 범주를 사용, 그래서

- (NSString *)SHA256_HASH { 
if (!self) return nil; 

unsigned char hash[CC_SHA256_DIGEST_LENGTH]; 
if (CC_SHA256([(NSData*)self bytes], [(NSData*)self length], hash)) { 
    NSData *sha2 = [NSData dataWithBytes:hash length:CC_SHA256_DIGEST_LENGTH]; 

    // description converts to hex but puts <> around it and spaces every 4 bytes 
    NSString *hash = [sha2 description]; 
    hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""]; 
    hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""]; 
    // hash is now a string with just the 40char hash value in it 
    //NSLog(@"hash = %@",hash); 

    // Format SHA256 fingerprint like 
    // 00:00:00:00:00:00:00:00:00 
    int keyLength=[hash length]; 
    NSString *formattedKey = @""; 
    for (int i=0; i<keyLength; i+=2) { 
     NSString *substr=[hash substringWithRange:NSMakeRange(i, 2)]; 
     if (i!=keyLength-2) 
      substr=[substr stringByAppendingString:@":"]; 
     formattedKey = [formattedKey stringByAppendingString:substr]; 
    } 

    return formattedKey; 
} 
return nil; 

}

을 따를 코드입니다