[英]OpenSSL “Seal” in C (or via shell)
我正在將一些PHP代碼移植到與Web API聯系的C語言上。
我遇到的問題是PHP代碼使用函數openssl_seal()
,但是我似乎找不到任何方法可以在C中甚至通過調用system()
openssl
來完成相同的操作。
從openssl_seal()
的PHP手冊中:
int openssl_seal(字符串$ data,字符串&$ sealed_data,數組&$ env_keys,數組$ pub_key_ids)
openssl_seal()通過將RC4與隨機生成的密鑰一起使用來密封(加密)數據。 使用與pub_key_ids中的標識符關聯的每個公共密鑰對密鑰進行加密,並在env_keys中返回每個加密的密鑰。 這意味着一個人可以將密封的數據發送給多個收件人(前提是已經獲得了他們的公鑰)。 每個收件人都必須同時接收密封的數據和使用收件人的公共密鑰加密的信封密鑰。
實施此方法的最佳方法是什么? 出於明顯的原因,我真的不希望每次都調用PHP腳本。
您在C接口的OpenSSL庫的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()
如果您被允許使用C ++而不僅是C,那么您可以使用Crypto ++ ,它將輕松地完成您需要的操作。
僅當您精通c ++時,才考慮使用Crypto ++。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.