我正在将我的 .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
?