PBKDF2 usando CommonCrypto en iOS

Estoy intentando usar CommonCrypto para generar claves usando PBKDF2 pero parece que no puedo importar CommonCrypto/CommonKeyDerivation.h , solo errores que no se encuentran.

¿Algunas ideas?

editar: probablemente debería mencionar que ya he agregado el marco de seguridad y puedo importar todos los demás encabezados CommonCrypto .

Así es como genero las claves AES256. Lo único interesante es que obtengo CommonCrypto para calcular cuántas rondas debo usar. Parece bastante sencillo.

 #import  ... // Makes a random 256-bit salt - (NSData*)generateSalt256 { unsigned char salt[32]; for (int i=0; i<32; i++) { salt[i] = (unsigned char)arc4random(); } return [NSData dataWithBytes:salt length:32]; } ... // Make keys! NSString* myPass = @"MyPassword1234"; NSData* myPassData = [myPass dataUsingEncoding:NSUTF8StringEncoding]; NSData* salt = [self generateSalt256]; // How many rounds to use so that it takes 0.1s ? int rounds = CCCalibratePBKDF(kCCPBKDF2, myPassData.length, salt.length, kCCPRFHmacAlgSHA256, 32, 100); // Open CommonKeyDerivation.h for help unsigned char key[32]; CCKeyDerivationPBKDF(kCCPBKDF2, myPassData.bytes, myPassData.length, salt.bytes, salt.length, kCCPRFHmacAlgSHA256, rounds, key, 32); 
  1. Agregue esta biblioteca a su proyecto libcommonCrypto.dylib
  2. Importar a la clase de generación de la clave hash.
  3. use el siguiente código para generar la clave hash.

Este es el código que he usado:

 // Salt data getting from salt string. NSData *saltData = [@"Salt String" dataUsingEncoding:NSUTF8StringEncoding]; // Data of String to generate Hash key(hexa decimal string). NSData *passwordData = [@"Hash key generated string" dataUsingEncoding:NSUTF8StringEncoding]; // Hash key (hexa decimal) string data length. NSMutableData *hashKeyData = [NSMutableData dataWithLength:CC_SHA1_DIGEST_LENGTH]; // Key Derivation using PBKDF2 algorithm. int result = CCKeyDerivationPBKDF(kCCPBKDF2, passwordData.bytes, passwordData.length, saltData.bytes, saltData.length, kCCPRFHmacAlgSHA1, 1000, hashKeyData.mutableBytes, hashKeyData.length); // Hexa decimal or hash key string from hash key data. NSString *hexDecimalString = hashKeyData.description; NSLog(@"Hexa decimal string:%@", hexDecimalString); 

¿Estás comstackndo para iOS5? o versiones anteriores?

Tanto API, CCKeyDerivationPBKDF y CCCalibratePBKDF , definidas en el archivo de encabezado, solo están disponibles en IOS5 (u OSX 10.7) y posteriores.

Puede asegurarse de que el archivo existe al ejecutar esto dentro de una ventana de terminal:

 $ find /Developer/ -name CommonKeyDerivation.h /Developer//Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/include/CommonCrypto/CommonKeyDerivation.h /Developer//Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/usr/include/CommonCrypto/CommonKeyDerivation.h /Developer//SDKs/MacOSX10.7.sdk/usr/include/CommonCrypto/CommonKeyDerivation.h 
    Intereting Posts