0

我正在将一些 PHP 代码移植到 C 中,该代码与 Web 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 脚本。

4

3 回答 3

2

您在 OpenSSL 库的 C 接口的 EVP(“信封加密”)部分之后:

#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())。

于 2009-11-15T21:29:35.120 回答
1

如果你被允许使用 C++ 而不仅仅是 C 你可以使用Crypto++,它会很容易地满足你的需要。

于 2009-11-15T20:37:28.840 回答
0

仅当您精通 C++ 知识时才考虑 Crypto++。

于 2010-05-24T03:03:36.347 回答