Использование 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. Как тогда я могу создать новый код, обратно совместимый с моей старой кодовой базой (и файлами, которые он создал)?
1 ответ
Я нашел решение. Мне кажется, невозможно получить ключи точно так, как это делает OpenSSL, используя любые методы Apple. Вместо этого мне просто нужно было прочитать, как OpenSSL получает ключ и вектор инициализации в разделе "Алгоритм получения ключа" на странице http://www.openssl.org/docs/crypto/EVP_BytesToKey.html и просто подражать этому.