2010-06-22 314 views
1

我想使用SHA256生成密钥并进行N次迭代。iphone中的SHA256密钥生成器

他们输入应该是我“密码” + “随机数”

我已经看到由苹果提供的加密采样但似乎它并没有提供我的要求(或者可能是我可能没有得到它正确)。

我已经通过下面的链接,以及,但不必须使用方法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; 

}