在ios中实现PBKDF加密字符串
我期待着使用在ios中实现PBKDF加密字符串,ios,iphone,xcode,string,Ios,Iphone,Xcode,String,我期待着使用PBKDF2实现加密。。 如果可能的话,请提供样品代码。实现加密字符串的PBKDF。。 谢谢。注意,这是一个示例,而不是生产代码 #import <CommonCrypto/CommonKeyDerivation.h> + (NSData *)doKeyForPassword:(NSString *)password salt:(NSData *)salt keySize:(NSUI
PBKDF2
实现加密。。
如果可能的话,请提供样品代码。实现加密字符串的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;
}
如果您正在复制此代码以在生产应用程序中使用:不要。这只是示例代码。基本上,如果需要这段代码,他们不应该做加密。雇佣一名领域专家,至少让领域专家对代码进行审查。您不能在此处使用
密码。长度。这将计算字符数,而不是字节数。对于多字节字符,您将截断它。使用-lengthofBytes使用编码:
,或者先将其转换为NSData
(我建议使用后者)。直到最近,我在RNCryptor中才发现了这个bug。非常尴尬@Rob True,这只是CCKeyDerivationPBKDF的一次性测试,不是设计用于生产的。谢谢已更改。@RobNapier在实现PKDF后,我很难将其用于AES加密/解密。我甚至发布了一个问题,但没有得到任何帮助。我在实现PKDF后被卡住了请看穿这个链接,并请回答以确保您清楚,PBKDF2
是一个密钥派生函数(散列)。它不是一种加密算法。你不能逆转它PBKDF2
通常用作加密的一个步骤。
- (void)test_doKeyForPassword {
NSData *key = [Crypto doKeyForPassword:@"password"
salt:[@"salt" dataUsingEncoding:NSUTF8StringEncoding]
keySize:kCCKeySizeAES128
rounds:1000];
NSLog(@"doKeyForPassword: %@",key);
}