: PBKDF
주를 구현하는 방법에 대한 샘플 코드는,이, 예입니다 생산 코드가 아닙니다.
#import <CommonCrypto/CommonKeyDerivation.h>
+ (NSData *)doKeyForPassword:(NSString *)password
salt:(NSData *)salt
keySize:(NSUInteger)keySize
rounds:(NSUInteger)rounds {
NSMutableData *derivedKey = [NSMutableData dataWithLength:keySize];
NSData *passwordData = [password dataUsingEncoding: NSUTF8StringEncoding];
CCKeyDerivationPBKDF(kCCPBKDF2, // algorithm
passwordData, // password
passwordData, // passwordLength
salt.bytes, // salt
salt.length, // saltLen
kCCPRFHmacAlgSHA1, // PRF
rounds, // rounds
derivedKey.mutableBytes, // derivedKey
derivedKey.length); // derivedKeyLen
return derivedKey;
}
아주 간단한 테스트, 더 나은 소금 를 사용하여 더 나은 라운드 CCCalibratePBKDF를 사용 가능한 계산합니다.
- (void)test_doKeyForPassword {
NSData *key = [Crypto doKeyForPassword:@"password"
salt:[@"salt" dataUsingEncoding:NSUTF8StringEncoding]
keySize:kCCKeySizeAES128
rounds:1000];
NSLog(@"doKeyForPassword: %@",key);
}
프로덕션 응용 프로그램에서이 코드를 복사하는 경우 : 수행하지 마십시오. 이것은 단지 예제 코드 일 뿐이다. 기본적으로이 코드가 필요한 경우 암호화를해서는 안됩니다. 도메인 전문가를 고용하십시오. 적어도 도메인 전문가가 심사하는 코드가 있어야합니다.
왜 lib-sodium입니까? 그것의 어떤면이 특별히 흥미로운가? CommonCrypto 만 사용하는 "문자열 암호화"가 필요하다면 Rob Napier의 [RNCryptor] (https://github.com/RNCryptor/RNCryptor)를 비롯한 몇 가지 좋은 래퍼가 있습니다. – zaph
요구 사항 – user3168665
RNCryptor는 ASE를 사용하여 간단한 문자열 암호화를 공유 할 수 있습니다 ... – user3168665