Objective c 使用CommonCrypto生成salt密钥
到目前为止,我一直是这样生成加密密钥的:Objective c 使用CommonCrypto生成salt密钥,objective-c,c,security,cryptography,commoncrypto,Objective C,C,Security,Cryptography,Commoncrypto,到目前为止,我一直是这样生成加密密钥的: unsigned char *salt; //8 salt bytes were created earlier unsigned char *password; //password was obtained earlier int passwordLength; //password length as well unsigned char evp_key[EVP_MAX_KEY_LENGTH] = {"\0"}; unsigned char iv
unsigned char *salt; //8 salt bytes were created earlier
unsigned char *password; //password was obtained earlier
int passwordLength; //password length as well
unsigned char evp_key[EVP_MAX_KEY_LENGTH] = {"\0"};
unsigned char iv[EVP_MAX_IV_LENGTH];
EVP_BytesToKey(cipher, EVP_md5(), salt, password, //cipher is also given
passwordLength,
1, evp_key, iv);
结果是一个密钥和一个“初始值”。然后我可以使用这两个(evp_key
和iv
)以及给定的密码来加密我的数据
现在,对于Lion,苹果已经否决了上述代码,我有以下问题:
问题:如何使用CommonCrypto执行相同的操作?我刚刚遇到了cckeydrivationpbkdf()
函数。这就是我要找的吗?我看不出这是怎么回事,因为我没有得到任何“初始值”。我不知道如何将这个普通的加密函数与旧方法进行比较
尤其是:这个新函数似乎甚至不支持MD5算法,只支持SHA1。那么,我如何才能创建与旧代码库(及其创建的文件)向后兼容的新代码呢?我找到了解决方案。对我来说,似乎不可能像OpenSSL使用任何苹果的方法那样精确地导出密钥。相反,我只需要阅读页面上“密钥派生算法”一节中的OpenSSL如何派生密钥和初始化向量,然后简单地模仿它。另请参见,它提供了用C和Swift实现此操作的代码。另一个问题似乎是dup,但它的代码有很好的答案。我认为它为未来的游客增加了更多的价值。用于某些内部组件。以前使用MD5,1.1.0切换到SHA256。请注意,此更改不会影响
EVP\u BytesToKey
和openssl enc
等命令。