Шифрование AES - генерация ключей с помощью OpenSSL - PullRequest
7 голосов
/ 07 апреля 2011

В качестве ссылки и продолжения к посту: как использовать OpenSSL для расшифровки данных, зашифрованных с помощью Java AES?

У меня есть следующие вопросы.

Я использую библиотеки OpenSSL и программирую на C для шифрования данных в aes-cbc-128. Мне дают любые входные двоичные данные, и я должен зашифровать их.

Я узнал, что в Java есть интерфейс CipherParameters для настройки IV и KeyParameters.

Есть ли способ сгенерировать IV и ключ, используя openSSL? Короче говоря, как можно использовать в программе на C для вызова случайного генератора openSSL для этих целей. Кто-нибудь из вас может предоставить некоторые документы / примеры / ссылки по этому вопросу?

Спасибо

Ответы [ 2 ]

13 голосов
/ 07 апреля 2011

Ключ AES и IV для симметричного шифрования - это просто набор случайных байтов.Таким образом, любой криптографически сильный генератор случайных чисел сделает свое дело.OpenSSL предоставляет такой генератор случайных чисел (который сам питается от того, что предоставляет операционная система, например, CryptGenRandom() в Windows или /dev/random и /dev/urandom в Linux).Функция RAND_bytes().Таким образом, код будет выглядеть так:

#include <openssl/rand.h>

/* ... */
unsigned char key[16], iv[16];

if (!RAND_bytes(key, sizeof key)) {
    /* OpenSSL reports a failure, act accordingly */
}
if (!RAND_bytes(iv, sizeof iv)) {
    /* OpenSSL reports a failure, act accordingly */
}
2 голосов
/ 07 апреля 2011

Предполагая AES-128:

unsigned char key[16];
RAND_bytes(key, sizeof(key));

unsigned char iv[16];
RAND_bytes(iv, sizeof(iv));

Генератор случайных чисел должен быть посеян перед использованием одного из этих .

...