2011-12-24 4 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_key и iv) вместе с данным шифром для шифрования моих данных.

Теперь, когда с Lion, Apple уже осуждал выше код, у меня следующий вопрос:

Вопрос: Как сделать то же самое с CommonCrypto? Я просто наткнулся на функцию CCKeyDerivationPBKDF(). Это тот, кого я ищу? Я не вижу, как это происходит, так как я не получаю никакого «начального значения». Я не знаю, как сравнить эту функцию CommonCrypto со старым методом.

В частности: Эта новая функция, похоже, даже не поддерживает алгоритм MD5 - только SHA1. Как же тогда я могу создать новый код, который обратно совместим с моей старой базой кода (и созданными ею файлами)?

+0

Также см. [Функция пароля для клавиш, совместимая с командами OpenSSL] (http://stackoverflow.com/q/9488919/608639), которая предоставляет код для этого в C и Swift. Другой вопрос кажется дубликом, но у него есть хорошие ответы с кодом. Я думаю, что это добавляет больше ценности для будущих посетителей. – jww

+0

[OpenSSL 1.1.0c изменил алгоритм дайджеста] (http://stackoverflow.com/q/39637388/608639), используемый в некоторых внутренних компонентах. Раньше использовался MD5, а 1.1.0 - SHA256. Будьте осторожны, это изменение не влияет на вас как в EVP_BytesToKey, так и в командах типа 'openssl enc'. – jww

ответ

1

Я нашел решение. Для меня кажется невозможным получить ключи точно так же, как OpenSSL делает с использованием любых методов Apple. Вместо этого мне просто нужно было прочитать, как OpenSSL выводит вектор ключа и инициализации в разделе «Алгоритм деривации ключей» на странице http://www.openssl.org/docs/crypto/EVP_BytesToKey.html и просто имитирует это.

Смежные вопросы