2017-03-16 25 views
0

を使用してAES 128モードcbcでファイルを暗号化するAES 128モードcbcでファイルを暗号化する必要があります。 AESの鍵は、公開鍵X509 V3を使用して暗号化する必要があります。 バイナリファイルPKCS7に保存する必要があります。公開鍵X509 V3(PKCS7)

BIO* certBIO = BIO_new_mem_buf((void*)&certData[0], certData.size()); 
if (certBIO) 
    x509 = d2i_X509_bio(certBIO, 0); 
BIO_free(certBIO); 

sk_X509_push(x509_stack, x509); 

BIO* bio = BIO_new(BIO_s_mem()); 
BIO_write(bio, &inData[0], inData.size()); 
BIO_flush(bio); 

PKCS7* pkcs7_encrypt = PKCS7_encrypt(x509_stack, bio, EVP_aes_128_cbc(), PKCS7_BINARY); 

FILE *fpPKCS7 = fopen(szPKCS7File, "wb"); 
if (!fpPKCS7) 
    return 1; 

i2d_PKCS7_fp(fpPKCS7, pkcs7_encrypt); 
fclose(fpPKCS7); 
X509_free(x509); 
sk_X509_pop_free(x509_stack, X509_free); 

正しいコードですか? 関数i2d_PKCS7_fpがクラッシュします。

+2

クラッシュした場合、コードはどのように正しいでしょうか? – zaph

+0

@zaph呼び出された関数のバグかもしれませんが、最初のオプションとしては入れません。 –

+1

@flonderあなたの質問に適切な言語タグを含めるように[編集]してください:C *または* C++。 –

答えて

0

私は解決策が見つかりました:

PKCS7* pkcs7_encrypt = PKCS7_encrypt(x509_stack, bioIn, EVP_aes_128_cbc(), PKCS7_BINARY); 

BIO *bioOut = BIO_new(BIO_s_file()); 
BIO_write_filename(bioOut, szPKCS7File); 
i2d_PKCS7_bio(bioOut, pkcs7_encrypt); 

をしかし、私は他の質問があります。 このファイルに実際にどのような情報がありますか? certificatの公開鍵でAESの暗号化された鍵が含まれていますか?

+0

回答で質問しないでください。 –