在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);
}