#c #file #openssl #key #set
#c #файл #openssl #Клавиша #установить
Вопрос:
Я создаю программу, которая генерирует пару ключей priva и puba для отправителя и privb и pubb для получателя, затем я экспортирую каждый из них в файл, вот часть моего кода для отправителя:
BIGNUM *ppub_a,*ppriv_a;
point = EC_KEY_get0_public_key(a);
ppub_a = EC_POINT_point2bn(group, point, POINT_CONVERSION_UNCOMPRESSED, ppub_a, ctx);
int kk, kk2;
ppriv_a = EC_KEY_get0_private_key(a);
kk = BN_print_fp(keypuba,ppub_a);
kk2 = BN_print_fp(keypriva, ppriv_a);
Мне нужна эта пара priva и puba и открытый ключ b (шестнадцатеричный файл pubb), чтобы сгенерировать ключ ECDH, а затем ключ AES. Затем зашифруйте файл.
Я не знаю, как получить и преобразовать этот шестнадцатеричный файл в открытый ключ, чтобы сгенерировать ключ ECDH.Кто-нибудь может мне помочь? Спасибо
Ответ №1:
Поскольку нигде в вашем примере кода вы не генерируете ключ или не указываете группу, я не могу быть уверен, в чем заключается проблема:
«Я не знаю, как получить и преобразовать этот шестнадцатеричный файл …» У вас возникли проблемы с генерацией файла (например, keypuba пуста или не содержит ключа), проблемы с чтением файла или вы просто не знаете, как действовать дальше?
К вашему сведению, в openssl есть функции преобразования шестнадцатеричного числа в большое число, однако вы, вероятно, не захотите вручную вычислять свои собственные эфемерные параметры Диффи Хеллмана, поскольку в OpenSSL есть ecies_encrypt()
процедура, которая заботится об этом, а также ecies_key_public_get_hex(EC_KEY *key)
которая уже принимает шестнадцатеричный ввод.
К сожалению, библиотека openssl была написана не как общий криптографический API, а как модуль для реализации SSL. Проблема № 1, когда разработчики пытаются использовать вызовы OpenSSL, заключается в знании того, какой интерфейс они должны использовать, а какой внутренний интерфейс они не должны использовать.
Если вы не являетесь экспертом и у вас нет веской причины запускать свою собственную версию ECIES, вам следует использовать встроенные вызовы.