2011-12-24 58 views
2

这是怎么了,我一直产生我的密钥至今:“初始值”使用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[EVP_MAX_IV_LENGTH]; 

EVP_BytesToKey(cipher, EVP_md5(), salt, password, //cipher is also given 
       passwordLength, 
       1, evp_key, iv); 

结果是一个密钥和然后我就可以使用这两个(evp_keyiv)以及给定的密码来加密我的数据。

现在与狮子,苹果已经过时了上面的代码,我有以下问题:

问题:我要如何做同样的事情CommonCrypto?我刚刚遇到了CCKeyDerivationPBKDF()函数。这是我要找的那个吗?我不明白这是怎么回事,因为我没有得到任何“初始价值”。我不知道如何将这个CommonCrypto函数与旧方法进行比较。

特别是:这个新功能似乎甚至不支持MD5算法 - 只有SHA1。那么,我可以如何创建与旧代码库(及其创建的文件)向后兼容的新代码?

+0

另请参见[密码到与OpenSSL命令兼容的键功能](http://stackoverflow.com/q/9488919/608639),它提供了C和Swift中的代码。另一个问题似乎是一个重复,但它有代码很好的答案。我认为它为未来的访客增加了更多的价值。 – jww 2016-07-15 18:54:15

+0

[OpenSSL 1.1.0c更改了摘要算法](http://stackoverflow.com/q/39637388/608639)在某些内部组件中使用。以前使用MD5,1.1.0切换到SHA256。请注意,这些更改不会影响'EVP_BytesToKey'和像'openssl enc'这样的命令。 – jww 2017-01-26 16:30:55

回答

1

我找到了解决方案。对我来说,似乎不可能完全按照OpenSSL使用任何Apple方法的方式来派生密钥。相反,我只需要阅读OpenSSL如何在页面http://www.openssl.org/docs/crypto/EVP_BytesToKey.html的“密钥导出算法”部分中导出密钥和初始化向量,并简单地模仿它。