この記事に従って、パスワード暗号化機能をアプリに書き込もうとしています。
関数を実行し、CCCalibratePBKDF
ラウンド数を出力する関数を作成しました。
const uint32_t oneSecond = 1000;
uint rounds = CCCalibratePBKDF(kCCPBKDF2,
predictedPasswordLength,
predictedSaltLength,
kCCPRFHmacAlgSHA256,
kCCKeySizeAES128,
oneSecond);
これは完全に機能しますが、次の部分を実装しようとすると、すべてがうまくいきません。
関数呼び出しの記述を開始するCCKeyDerivationPBKDF
と、関数とすべてのパラメーターが自動的に完了します。入力を進めると、すべてのパラメーターも自動入力されます。
- (NSData *)authenticationDataForPassword: (NSString *)password salt: (NSData *)salt rounds: (uint) rounds
{
const NSString *plainData = @"Fuzzy Aliens";
uint8_t key[kCCKeySizeAES128] = {0};
int keyDerivationResult = CCKeyDerivationPBKDF(kCCPBKDF2,
[password UTF8String],
[password lengthOfBytesUsingEncoding: NSUTF8StringEncoding],
[salt bytes],
[salt length],
kCCPRFHmacAlgSHA256,
rounds,
key,
kCCKeySizeAES128);
if (keyDerivationResult == kCCParamError) {
//you shouldn't get here with the parameters as above
return nil;
}
uint8_t hmac[CC_SHA256_DIGEST_LENGTH] = {0};
CCHmac(kCCHmacAlgSHA256,
key,
kCCKeySizeAES128,
[plainData UTF8String],
[plainData lengthOfBytesUsingEncoding: NSUTF8StringEncoding],
hmac);
NSData *hmacData = [NSData dataWithBytes: hmac length: CC_SHA256_DIGEST_LENGTH];
return hmacData;
}
しかし、私がヒットするとすぐに; 「「CCKeyDerivationPBKDF」の呼び出しに一致する関数がありません」というエラーをマークし、ビルドなどを行いません。
CommonCrypto/CommonKeyDerivation.hとCommonCrypto/CommonCryptor.hをインポートしました。これらは両方とも、列挙型の名前に必要だったためです。