#import #import #import #import "PBKDF2.h" @implementation PBKDF2 + (NSString *) toHex:(NSData *)nsdata { NSString * hexStr = [NSString stringWithFormat:@"%@", nsdata]; for(NSString * toRemove in [NSArray arrayWithObjects:@"<", @">", @" ", nil]) hexStr = [hexStr stringByReplacingOccurrencesOfString:toRemove withString:@""]; return hexStr; } + (NSString *) derivationKey:(NSString *)password salt: (NSString *)salt iterations: (nonnull int *)iterations { // Data of String to generate Hash key(hexa decimal string). NSData *passwordData = [password dataUsingEncoding:NSUTF8StringEncoding]; NSData *saltData = [salt dataUsingEncoding:NSUTF8StringEncoding]; // Hash key (hexa decimal) string data length. NSMutableData *hashKeyData = [NSMutableData dataWithLength:CC_SHA512_DIGEST_LENGTH]; // Key Derivation using PBKDF2 algorithm. int status = CCKeyDerivationPBKDF( kCCPBKDF2, passwordData.bytes, passwordData.length, saltData.bytes, saltData.length, kCCPRFHmacAlgSHA512, iterations, hashKeyData.mutableBytes, hashKeyData.length); if (status == kCCParamError) { NSLog(@"Key derivation error"); return @""; } return [self toHex:hashKeyData]; } @end