.NET和Iphone之间的加密

时间:2013-08-27 06:29:40

标签: .net objective-c encryption aes

我正在将.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;
}

如果我将目标C中的[derivedKey base64EncodingWithLineLength:0]与.NET中的string passKey = Convert.ToBase64String(KeyBytes);进行比较,则会得到不同的结果。

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

根据我的研究,我理解的是,PasswordDeriveBytes正在使用PBKDF1和Rfc2898DeriveBytes以及使用PBKDF2的Objective C代码。

请建议我该怎么做?

目标C中是否有相当于PasswordDeriveBytes的可用选项?

0 个答案:

没有答案