【问题标题】:Encrypt file with AES 128 mode cbc using public key X509 V3 (PKCS7)使用公钥 X509 V3 (PKCS7) 使用 AES 128 模式 cbc 加密文件
【发布时间】:2017-03-16 12:59:55
【问题描述】:

我需要使用 AES 128 模式 cbc 加密文件。 AES 的密钥需要使用公钥 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 崩溃。

【问题讨论】:

  • 如果它崩溃了代码怎么可能是正确的?
  • @zaph 这可能是被调用函数中的一个错误,但我不会把它作为第一选择。
  • @flonder 请edit您的问题包含适当的语言标签:C C++。
  • 没有 C 任何 C++ 结构,添加了 C 标签。

标签: c++ c encryption cryptography


【解决方案1】:

我找到了解决方案:

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);

但我还有一个问题。 这个文件里到底有什么信息? 是否包含通过证书公钥加密的 AES 密钥?

【讨论】:

  • 不要在答案中提问。
猜你喜欢
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 2017-10-11
  • 2015-06-24
  • 2019-08-17
  • 2020-04-15
  • 1970-01-01
  • 2017-03-27
相关资源
最近更新 更多