2009-11-15 4 views
0

웹 API에 연결하는 C로 일부 PHP 코드를 이식하는 중입니다.OpenSSL "Seal"in C (또는 쉘을 통해)

나는 PHP 코드가 openssl_seal() 함수를 사용하지만, C에서 동일한 작업을 수행하거나 심지어 system()으로 전화하여 openssl을 통해 찾을 수없는 것으로 보입니다. openssl_seal()에 PHP 교재

:

INT의 openssl_seal (문자열 $ 데이터 문자열 & $ sealed_data 배열 & $ env_keys, 배열 $ pub_key_ids)

openssl_seal() 밀봉 (암호화하여) 데이터 을 무작위로 생성 한비밀 키로 RC4를 사용합니다. 키는 의 식별자가 pub_key_ids 인 에 각각 연결된 공개 키로 암호화되며 각 암호화 된 키는 env_keys에 반환됩니다. 즉, 명의 수신자에게 봉쇄 된 데이터를 명의 수신자에게 보낼 수 있습니다 (단, 공개 키를 가져온 경우). 각 수신자 은 봉인 된 데이터와 수신자의 공개 키를 사용하여 으로 암호화 된 봉투 키 을 모두 수신해야합니다.

이것을 구현하는 가장 좋은 방법은 무엇입니까? 분명한 이유가있을 때마다 항상 이 아닌을 PHP 스크립트로 호출하는 것이 좋습니다.

답변

2

당신은 EVP 후 있습니다 ("봉투 암호화")에서 OpenSSL 라이브러리에 C 인터페이스의 일부 :이 경우

#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를 원하기 때문에, 당신이 ' d 에 대한 type 매개 변수로 EVP_rc4()을 사용하십시오.

+0

이 코드를 사용하는 코드가 있습니까? 내가 찾을 수있는 참조 코드가없는 설명서로 고민하고 있습니다. –

+0

이것이 내가 찾을 수있는 첫 번째 예입니다. http://www.gnu-darwin.org/www001/src/src/crypto/openssl/demos/maurice/example1.c.html - 충분하지 않다면 시도해 보겠습니다. 오늘 나중에 뭔가 함께 넣어. – caf

+0

@caf 링크가 끊어졌습니다 ... – dg123

1

C가 아닌 C를 사용할 수 있다면 Crypto++을 사용하면 쉽게 필요한 작업을 수행 할 수 있습니다.

0

C++로 능숙한 지식이있는 경우에만 Crypto ++를 고려하십시오.

관련 문제