如何在iOS中使用lib-sodium加密字符串

时间:2014-01-08 05:50:52

标签: ios objective-c xcode encryption libsodium

我使用QR lib扫描了ZXingWidget代码图像,收到了一个字符串作为响应。 现在我想在iOS中使用lib-sodium加密该字符串。

如何使用lib-sodium库在iOS中进行字符串加密的任何建议.... 提前谢谢......

1 个答案:

答案 0 :(得分:0)

根据要求:实施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);
}

如果要复制此代码以在生产应用中使用:不要。这只是示例代码。基本上如果需要这个代码,他们就不应该进行加密。聘请域专家,至少要有域专家审查的代码。