2010-06-22 18 views
1

Je veux générer une clé en utilisant SHA256 avec N nombre d'itérations.Générateur de clé SHA256 dans l'iphone

Ils devraient être mon entrée « mot de passe » + « nombre aléatoire »

Je l'ai vu l'échantillon Crypto fourni par Apple, mais il semble qu'il ne fournit pas mon exigence (ou peut-être possible, je Je n'ai pas compris correctement).

Je suis passé par lien ci-dessous aussi bien, mais est ne marche pas avoir méthode pour générer une clé à l'aide SHA256 http://iphonedevelopment.blogspot.com/2009/02/strong-encryption-for-cocoa-cocoa-touch.html

En attendant quelques indices.

Cordialement

Répondre

1

Essayez cela, il a travaillé pour moi

1) Pour obtenir un hachage pour la saisie de texte plane

-(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) Pour obtenir le hachage pour NSData en entrée

Remarque : - Je l'ai utilisé la catégorie NSData, de sorte que le code est le suivant

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

}