Я работаю над переносом кода 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 каждый раз по понятным причинам.
Вы после части 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 ++.