Это, как я не генерировал свои криптографические ключи до сих пор: «Начальное значение»Использование 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_key
и iv
) вместе с данным шифром для шифрования моих данных.
Теперь, когда с Lion, Apple уже осуждал выше код, у меня следующий вопрос:
Вопрос: Как сделать то же самое с CommonCrypto? Я просто наткнулся на функцию CCKeyDerivationPBKDF()
. Это тот, кого я ищу? Я не вижу, как это происходит, так как я не получаю никакого «начального значения». Я не знаю, как сравнить эту функцию CommonCrypto со старым методом.
В частности: Эта новая функция, похоже, даже не поддерживает алгоритм MD5 - только SHA1. Как же тогда я могу создать новый код, который обратно совместим с моей старой базой кода (и созданными ею файлами)?
Также см. [Функция пароля для клавиш, совместимая с командами OpenSSL] (http://stackoverflow.com/q/9488919/608639), которая предоставляет код для этого в C и Swift. Другой вопрос кажется дубликом, но у него есть хорошие ответы с кодом. Я думаю, что это добавляет больше ценности для будущих посетителей. – jww
[OpenSSL 1.1.0c изменил алгоритм дайджеста] (http://stackoverflow.com/q/39637388/608639), используемый в некоторых внутренних компонентах. Раньше использовался MD5, а 1.1.0 - SHA256. Будьте осторожны, это изменение не влияет на вас как в EVP_BytesToKey, так и в командах типа 'openssl enc'. – jww