2

我正在将我的 .NET 加密代码转换为 Objective C。这是我在 .NET 中创建密钥的代码:

byte[] _corrpassword = Encoding.UTF8.GetBytes("1234567891123456");

PasswordDeriveBytes DerivedPassword = new PasswordDeriveBytes(_corrpassword, salt, "SHA1", _passwordIterations);
byte[] KeyBytes = DerivedPassword.GetBytes(_keySize / 8);

我正在寻找目标 C 中的等效项。

我尝试创建它,但如果我将它们转换为 base64 字符串,两者都会给出不同的结果:

-(NSData *)AESKeyForPassword:(NSString *)password
           salt:(NSData *)salt
{
    NSMutableData * derivedKey = [NSMutableData dataWithLength:kCCKeySizeAES256];

    int result = CCKeyDerivationPBKDF(kCCPBKDF2,            // algorithm
                                    password.UTF8String,  // password
                                    password.length,  // passwordLength
                                    salt.bytes,           // salt
                                    salt.length,          // saltLen
                                    kCCPRFHmacAlgSHA1,    // PRF
                                    2,         // rounds
                                    derivedKey.mutableBytes, // derivedKey
                                    derivedKey.length); // derivedKeyLen

    NSAssert(result == kCCSuccess,
        @"Unable to create AES key for password: %d", result);

    return derivedKey;
}

如果我[derivedKey base64EncodingWithLineLength:0]在目标 C 中与string passKey = Convert.ToBase64String(KeyBytes);在 .NET 中进行比较,两者都会给出不同的结果。

编辑:我在 .NET 方面尝试过 -Rfc2898DeriveBytes而不是PasswordDeriveBytes问题解决了。但是,我无法更改 .NET 代码,因为它已经在生产中。

根据我的研究,我了解的PasswordDeriveBytes是使用 PBKDF1 和Rfc2898DeriveBytes使用 PBKDF2 的 Objective C 代码。

请建议我该怎么办?

在 Objective C 中是否有任何可用的选项PasswordDeriveBytes

4

0 回答 0