Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用CommonCrypto生成salt密钥_Objective C_C_Security_Cryptography_Commoncrypto - Fatal编程技术网

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
等命令。