0

Web API に接続する PHP コードを C に移植する作業を行っています。

私が遭遇した問題は、PHP コードが functionopenssl_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);

(この場合、PHP コードとの互換性のために RC4 が必要なため、 へのパラメーターEVP_rc4()として使用します)。typeEVP_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 に答える