PBKDF2.m 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #import <CommonCrypto/CommonCryptor.h>
  2. #import <CommonCrypto/CommonDigest.h>
  3. #import <CommonCrypto/CommonKeyDerivation.h>
  4. #import "PBKDF2.h"
  5. @implementation PBKDF2
  6. + (NSString *) toHex:(NSData *)nsdata {
  7. NSString * hexStr = [NSString stringWithFormat:@"%@", nsdata];
  8. for(NSString * toRemove in [NSArray arrayWithObjects:@"<", @">", @" ", nil])
  9. hexStr = [hexStr stringByReplacingOccurrencesOfString:toRemove withString:@""];
  10. return hexStr;
  11. }
  12. + (NSString *) derivationKey:(NSString *)password salt: (NSString *)salt iterations: (nonnull NSNumber *)iterations {
  13. // Data of String to generate Hash key(hexa decimal string).
  14. NSData *passwordData = [password dataUsingEncoding:NSUTF8StringEncoding];
  15. NSData *saltData = [salt dataUsingEncoding:NSUTF8StringEncoding];
  16. // Hash key (hexa decimal) string data length.
  17. NSMutableData *hashKeyData = [NSMutableData dataWithLength:CC_SHA512_DIGEST_LENGTH];
  18. // Key Derivation using PBKDF2 algorithm.
  19. int status = CCKeyDerivationPBKDF(
  20. kCCPBKDF2,
  21. passwordData.bytes,
  22. passwordData.length,
  23. saltData.bytes,
  24. saltData.length,
  25. kCCPRFHmacAlgSHA512,
  26. iterations,
  27. hashKeyData.mutableBytes,
  28. hashKeyData.length);
  29. if (status == kCCParamError) {
  30. NSLog(@"Key derivation error");
  31. return @"";
  32. }
  33. return [self toHex:hashKeyData];
  34. }
  35. @end