Генератор ключей SHA256 в iphone - PullRequest
1 голос
/ 22 июня 2010

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

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

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

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

Ожидание некоторой подсказки.

С уважением

Ответы [ 2 ]

1 голос
/ 24 июля 2012

Попробуйте, у меня все заработало

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;

}

0 голосов
/ 14 апреля 2011

Это обсуждение на форумах Apple должно помочь вам

...