OpenSSL“密封”在 C 中(或通过 shell)
我正在努力将一些 PHP 代码移植到 C 语言,以连接 Web API。
我遇到的问题是 PHP 代码使用函数 openssl_seal()
,但我似乎找不到任何方法在 C 中甚至通过 openssl 执行相同的操作
在对 system()
的调用中。
来自 openssl_seal()
的 PHP 手册:
int openssl_seal ( 字符串 $data , 字符串 &$sealed_data ,数组 &$env_keys ,数组 $pub_key_ids )
openssl_seal() 密封(加密)数据 通过使用 RC4 和随机生成的 秘密密钥。密钥被加密为 每个关联的公钥 与 pub_key_ids 中的标识符 每个加密密钥都返回在 env_keys 。这意味着一个人可以 将密封数据发送给多个 收件人(前提是已获得 他们的公钥)。每个收件人 必须接收密封数据和 加密的信封密钥 使用接收者的公钥。
实现这一点的最佳方法是什么?出于显而易见的原因,我真的不希望每次都调用 PHP 脚本。
I'm working on porting some PHP code to C, that contacts a web API.
The issue I've come across is that the PHP code uses the function openssl_seal()
, but I can't seem to find any way to do the same thing in C or even via openssl
in a call to system()
.
From the PHP manual on openssl_seal()
:
int openssl_seal ( string $data ,
string &$sealed_data , array
&$env_keys , array $pub_key_ids )openssl_seal() seals (encrypts) data
by using RC4 with a randomly generated
secret key. The key is encrypted with
each of the public keys associated
with the identifiers in pub_key_ids
and each encrypted key is returned in
env_keys . This means that one can
send sealed data to multiple
recipients (provided one has obtained
their public keys). Each recipient
must receive both the sealed data and
the envelope key that was encrypted
with the recipient's public key.
What would be the best way to implement this? I'd really prefer not to call out to a PHP script every time, for obvious reasons.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您正在寻找 OpenSSL 库的 C 接口的 EVP(“信封加密”)部分:(
在本例中,由于您希望 RC4 与 PHP 代码兼容,因此您可以使用
EVP_rc4()
作为EVP_SealInit()
的type
参数)。You are after the EVP ("Envelope Encryption") part of the C interface to the OpenSSL library:
(In this case, since you want RC4 for compatibility with the PHP code, you'd use
EVP_rc4()
as thetype
parameter toEVP_SealInit()
).如果您被允许使用 C++ 而不仅仅是 C,您可以使用 Crypto++,它将轻松完成您需要的操作。
If you are allowed to use C++ and not just C You can use Crypto++, it will easily do what you need.
仅当您精通 C++ 知识时才考虑 Crypto++。
Consider Crypto++ only if you have proficient knowledge in c++.