2017-03-16 81 views
0

我需要使用AES 128模式cbc加密文件。 AES的密鑰需要使用公鑰X509 V3進行加密。 所有這些都需要保存在二進制文件PKCS7中。使用AES 128模式cbc使用公鑰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

不要在答案中提問。 –

相關問題