1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #import <CommonCrypto/CommonCryptor.h>
- #import <CommonCrypto/CommonDigest.h>
- #import <CommonCrypto/CommonKeyDerivation.h>
- #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
|