2010-06-22 2 views
1

Я хочу сгенерировать ключ, используя SHA256 с N количеством итераций.SHA256 генератор ключей в iphone

Они вход должен быть мой «пароль» + «случайное число»

Я видел образец Crypto предоставленный яблоко, но это, кажется, он не обеспечивает мое требование (или может быть возможно я не получил его должным образом).

Я прошел через ссылку ниже, а, но оленья кожа имеет метод для генерации ключа с помощью SHA256 http://iphonedevelopment.blogspot.com/2009/02/strong-encryption-for-cocoa-cocoa-touch.html

В ожидании некоторого намека.

С уважением

ответ

1

Попробуйте это, он работал для меня

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) Получить хеш для 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; 

}