【问题标题】:How to encrypt string using lib-sodium in iOS如何在 iOS 中使用 lib-sodium 加密字符串
【发布时间】:2014-01-26 02:21:42
【问题描述】:

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

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

【问题讨论】:

  • 为什么选择 lib-sodium?它的哪个方面特别令人感兴趣?如果您只想使用 CommonCrypto 进行“字符串加密”,那么有几个很好的包装器,包括 Rob Napier 的 RNCryptor
  • RNCryptor 你能用 ASE 分享简单的字符串加密吗...
  • 如果可能,请您提供示例代码。关于实现用于加密字符串的 PBKDF。谢谢。

标签: ios objective-c xcode encryption libsodium


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 2013-04-04
    相关资源
    最近更新 更多