【发布时间】:2011-12-24 00:59:24
【问题描述】:
这就是我到目前为止生成加密密钥的方式:
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,Apple 已经弃用了上述代码,我有以下问题:
问题:如何使用 CommonCrypto 做同样的事情?我刚刚遇到了CCKeyDerivationPBKDF() 函数。这是我要找的那个吗?我看不出这是怎么回事,因为我没有得到任何“初始值”。我不知道如何比较这个 CommonCrypto 函数和旧方法。
特别是:这个新函数似乎甚至不支持 MD5 算法——只支持 SHA1。那么,如何创建与旧代码库(及其创建的文件)向后兼容的新代码?
【问题讨论】:
-
另见Password to key function compatible with OpenSSL commands,它提供了在 C 和 Swift 中执行此操作的代码。另一个问题似乎是一个重复,但它的代码有很好的答案。我认为它为未来的访问者增加了更多价值。
-
OpenSSL 1.1.0c changed the digest algorithm 用于一些内部组件。以前使用MD5,1.1.0改用SHA256。请注意,
EVP_BytesToKey和openssl enc等命令中的更改不会影响您。
标签: objective-c c security cryptography commoncrypto