我正在将.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
的可用选项?