OpenSSL «Печать» в C (или через оболочку)

Я работаю над переносом кода PHP на C, который связывается с веб-API.

Проблема, с которой я столкнулся, заключается в том, что PHP-код использует функцию openssl_seal() , но я не могу найти способ сделать то же самое в C или даже через openssl в вызове system() .

Из руководства PHP по openssl_seal() :

int openssl_seal (строка $ data, string & $ sealed_data, array & $ env_keys, array $ pub_key_ids)

openssl_seal () печатает (шифрует) данные с помощью RC4 со случайно сгенерированным секретным ключом. Ключ зашифрован каждым открытым ключом, связанным с идентификаторами в pub_key_ids, и каждый зашифрованный ключ возвращается в env_keys. Это означает, что можно отправить запечатанные данные нескольким получателям (при условии, что они получили открытые ключи). Каждый получатель должен получить как закрытые данные, так и ключ конверта, который был зашифрован с помощью открытого ключа получателя.

Какой был бы лучший способ реализовать это? Я бы предпочел не обращаться к скрипту PHP каждый раз по понятным причинам.

Solutions Collecting From Web of "OpenSSL «Печать» в C (или через оболочку)"

Вы после части EVP («Envelope Encryption») части интерфейса C в библиотеке OpenSSL:

 #include <openssl/evp.h> int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek, int *ekl, unsigned char *iv, EVP_PKEY **pubk, int npubk); int EVP_SealUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, unsigned char *in, int inl); int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); 

(В этом случае, поскольку вам нужен RC4 для совместимости с кодом PHP, вы должны использовать EVP_rc4() в качестве параметра type для EVP_SealInit() ).

Если вам разрешено использовать C ++, а не только C, вы можете использовать Crypto ++ , он будет легко делать то, что вам нужно.

Рассмотрим Crypto ++, только если вы владеете знаниями в c ++.