OpenSSL «Печать» в C (или через оболочку) - PullRequest
0 голосов
/ 15 ноября 2009

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

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

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

int openssl_seal (строка $ data, строка & $ sealed_data, массив & $ env_keys, массив $ pub_key_ids)

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

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

Ответы [ 3 ]

2 голосов
/ 16 ноября 2009

Вы находитесь после части EVP («Шифрование конверта») интерфейса 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()).

1 голос
/ 15 ноября 2009

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

0 голосов
/ 24 мая 2010

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

...