Использование CommonCrypto для генерации соленого ключа - PullRequest
2 голосов
/ 24 декабря 2011

Вот как я генерировал свои криптографические ключи до сих пор:

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 Ответ

1 голос
/ 27 декабря 2011

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

...