在iOS上使用CommonCrypto的PBKDF2

我试图用CommonCrypto生成密钥使用PBKDF2但我似乎无法导入CommonCrypto/CommonKeyDerivation.h ,我只是没有find它的错误。

有任何想法吗?

编辑:我应该提到我已经添加了安全框架,我可以导入所有其他CommonCrypto头。

这是我如何生成AES256键。 唯一有趣的是,我得到CommonCrypto来估计我要使用多less轮。 这看起来很直接。

 #import <CommonCrypto/CommonKeyDerivation.h> ... // 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. 将这个库添加到您的项目libcommonCrypto.dylib
  2. #进入散列键生成类。
  3. 使用下面的代码来生成散列键。

这是我用过的代码:

 // 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); 

你正在iOS5的build设? 或更早的版本?

在头文件中定义的API, CCKeyDerivationPBKDFCCCalibratePBKDF仅在IOS5(或OSX 10.7)及更高版本中可用。

您可以通过在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