在C代码中使用OpenSSL进行明文签名

时间:2014-06-06 10:10:14

标签: c openssl sign pkcs#7 smime

我正在尝试使用OpenSSL签署电子邮件。我想在电子邮件上执行明文签名。

我知道我可以使用命令提示符执行此操作:

openssl smime -sign -in hw.txt -text -out signed.msg -signer mycert.pem

但是如何使用C代码执行此操作?

这就是我现在正在做的事情:

int flgs = PKCS7_DETACHED | PKCS7_TEXT;
PKCS7 * p7 = PKCS7_sign(signCert, pKey, certs, bio, flgs);
if(p7 != NULL) {
    int res = PKCS7_final(p7, bio, flags);
    __android_log_print(ANDROID_LOG_DEBUG, "OpenSSLJni", "\nFinal result is: %d", res);
    FILE *outfile = fopen("/storage/sdcard0/sign_output.txt", "w");
    BIO* out = BIO_new_fp(outfile, BIO_NOCLOSE) ;// BIO_new_file(outfile, "");
    BIO_reset(bio);
    SMIME_write_PKCS7(out, p7, bio, flags);
    return true;
}

但是我在输出文件中我只获得签名而不是正文和签名。

任何指针?

1 个答案:

答案 0 :(得分:0)

终于做到了。

这只是一面失踪的旗帜。

int flgs = PKCS7_STREAM | PKCS7_DETACHED | PKCS7_BINARY ;

添加了此标志,它开始完美运行。