C中的OpenSSL“Seal”(或通过shell)

我正在努力将一些PHP代码移植到C,它与Web API联系。

我遇到的问题是PHP代码使用函数openssl_seal() ,但我似乎无法找到任何方法在C中执行相同的操作,甚至在调用system()通过openssl

openssl_seal()上的PHP手册:

int openssl_seal(string $ data,string&$ sealed_data,array&$ env_keys,array $ pub_key_ids)

openssl_seal()使用带有随机生成的密钥的RC4密封(加密)数据。 密钥使用与pub_key_ids中的标识符相关联的每个公钥加密,并且每个加密密钥在env_keys中返回。 这意味着可以向多个收件人发送密封数据(前提是已获得其公钥)。 每个收件人必须同时接收密封数据和使用收件人公钥加密的信封密钥。

实现这个的最佳方法是什么? 出于显而易见的原因,我真的不想每次都调用PHP脚本。

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

 #include  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()作为EVP_rc4()type参数。

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

只有掌握了c ++的熟练知识才能考虑使用Crypto ++。