使用OpenSSL';s CMS_encrypt()在Objective-c中

使用OpenSSL';s CMS_encrypt()在Objective-c中,openssl,sample,smime,Openssl,Sample,Smime,我想使用OpenSSL的cms库使用cms_encrypt()方法对具有特定证书的文件进行加密。(我想这应该是对的) 有人有关于使用CMS_encrypt()的小样本吗 谢谢我在openssl…/demos/cms/cms\u enc.C的openssl下载文件夹中找到了一个C语言的演示 使用以下代码(openssl的属性): /*简单的S/MIME加密示例*/ #包括 #包括 #包括 int main(int argc,字符**argv) { BIO*in=NULL,*out=NULL,*tb

我想使用OpenSSL的cms库使用cms_encrypt()方法对具有特定证书的文件进行加密。(我想这应该是对的) 有人有关于使用CMS_encrypt()的小样本吗


谢谢

我在openssl…/demos/cms/cms\u enc.C的openssl下载文件夹中找到了一个C语言的演示

使用以下代码(openssl的属性):

/*简单的S/MIME加密示例*/
#包括
#包括
#包括
int main(int argc,字符**argv)
{
BIO*in=NULL,*out=NULL,*tbio=NULL;
X509*rcert=NULL;
(X509)*recips的栈_=NULL;
CMS_ContentInfo*CMS=NULL;
int-ret=1;
/*
*仅在OpenSSL 1.0.0及更高版本上:
*用于流式设置CMS\U流
*/
int flags=CMS\u流;
OpenSSL_添加_所有算法();
错误加载加密字符串();
/*读入收件人证书*/
tbio=BIO_new_文件(“signer.pem”、“r”);
如果(!tbio)
后悔莫及;
rcert=PEM_read_bio_X509(tbio,NULL,0,NULL);
如果(!rcert)
后悔莫及;
/*创建收件人堆栈并向其中添加收件人证书*/
recips=sk_X509_new_null();
如果(!recips | |!sk_X509_push(recips,rcert))
后悔莫及;
/*sk_X509_pop_free将释放收件人堆栈及其内容
*因此,将rcert设置为NULL,这样它就不会被释放两次。
*/
rcert=NULL;
/*正在加密的开放内容*/
in=BIO_new_文件(“encr.txt”、“r”);
如果(!in)
后悔莫及;
/*加密内容*/
cms=cms_加密(recips,in,EVP_des_ede3_cbc(),标志);
如果(!cms)
后悔莫及;
out=BIO_new_文件(“smencr.txt”、“w”);
如果(!out)
后悔莫及;
/*写出S/MIME消息*/
如果(!SMIME_write_CMS(输出、CMS、输入、标志))
后悔莫及;
ret=0;
错误:
如果(ret)
{
fprintf(stderr,“数据加密错误”);
错误打印错误fp(stderr);
}
如果(cms)
内容信息免费(CMS);
如果(rcert)
X509_自由(rcert);
如果(往复式)
sk_X509_pop_free(往复式,X509_free);
如果(在)
不含BIO_(in);
如果(出)
无生物素(out);
如果(待定)
无生物素(tbio);
返回ret;
}

我在openssl…/demos/cms/cms\u enc.C的openssl下载文件夹中找到了一个C语言的演示

使用以下代码(openssl的属性):

/*简单的S/MIME加密示例*/
#包括
#包括
#包括
int main(int argc,字符**argv)
{
BIO*in=NULL,*out=NULL,*tbio=NULL;
X509*rcert=NULL;
(X509)*recips的栈_=NULL;
CMS_ContentInfo*CMS=NULL;
int-ret=1;
/*
*仅在OpenSSL 1.0.0及更高版本上:
*用于流式设置CMS\U流
*/
int flags=CMS\u流;
OpenSSL_添加_所有算法();
错误加载加密字符串();
/*读入收件人证书*/
tbio=BIO_new_文件(“signer.pem”、“r”);
如果(!tbio)
后悔莫及;
rcert=PEM_read_bio_X509(tbio,NULL,0,NULL);
如果(!rcert)
后悔莫及;
/*创建收件人堆栈并向其中添加收件人证书*/
recips=sk_X509_new_null();
如果(!recips | |!sk_X509_push(recips,rcert))
后悔莫及;
/*sk_X509_pop_free将释放收件人堆栈及其内容
*因此,将rcert设置为NULL,这样它就不会被释放两次。
*/
rcert=NULL;
/*正在加密的开放内容*/
in=BIO_new_文件(“encr.txt”、“r”);
如果(!in)
后悔莫及;
/*加密内容*/
cms=cms_加密(recips,in,EVP_des_ede3_cbc(),标志);
如果(!cms)
后悔莫及;
out=BIO_new_文件(“smencr.txt”、“w”);
如果(!out)
后悔莫及;
/*写出S/MIME消息*/
如果(!SMIME_write_CMS(输出、CMS、输入、标志))
后悔莫及;
ret=0;
错误:
如果(ret)
{
fprintf(stderr,“数据加密错误”);
错误打印错误fp(stderr);
}
如果(cms)
内容信息免费(CMS);
如果(rcert)
X509_自由(rcert);
如果(往复式)
sk_X509_pop_free(往复式,X509_free);
如果(在)
不含BIO_(in);
如果(出)
无生物素(out);
如果(待定)
无生物素(tbio);
返回ret;
}
在下载源代码并转到
demo
文件夹。在下载源代码并转到
demo
文件夹。
    /* Simple S/MIME encrypt example */
#include <openssl/pem.h>
#include <openssl/cms.h>
#include <openssl/err.h>

int main(int argc, char **argv)
    {
    BIO *in = NULL, *out = NULL, *tbio = NULL;
    X509 *rcert = NULL;
    STACK_OF(X509) *recips = NULL;
    CMS_ContentInfo *cms = NULL;
    int ret = 1;

    /*
     * On OpenSSL 1.0.0 and later only:
     * for streaming set CMS_STREAM
     */
    int flags = CMS_STREAM;

    OpenSSL_add_all_algorithms();
    ERR_load_crypto_strings();

    /* Read in recipient certificate */
    tbio = BIO_new_file("signer.pem", "r");

    if (!tbio)
        goto err;

    rcert = PEM_read_bio_X509(tbio, NULL, 0, NULL);

    if (!rcert)
        goto err;

    /* Create recipient STACK and add recipient cert to it */
    recips = sk_X509_new_null();

    if (!recips || !sk_X509_push(recips, rcert))
        goto err;

    /* sk_X509_pop_free will free up recipient STACK and its contents
     * so set rcert to NULL so it isn't freed up twice.
     */
    rcert = NULL;

    /* Open content being encrypted */

    in = BIO_new_file("encr.txt", "r");

    if (!in)
        goto err;

    /* encrypt content */
    cms = CMS_encrypt(recips, in, EVP_des_ede3_cbc(), flags);

    if (!cms)
        goto err;

    out = BIO_new_file("smencr.txt", "w");
    if (!out)
        goto err;

    /* Write out S/MIME message */
    if (!SMIME_write_CMS(out, cms, in, flags))
        goto err;

    ret = 0;

    err:

    if (ret)
        {
        fprintf(stderr, "Error Encrypting Data\n");
        ERR_print_errors_fp(stderr);
        }

    if (cms)
        CMS_ContentInfo_free(cms);
    if (rcert)
        X509_free(rcert);
    if (recips)
        sk_X509_pop_free(recips, X509_free);

    if (in)
        BIO_free(in);
    if (out)
        BIO_free(out);
    if (tbio)
        BIO_free(tbio);

    return ret;

    }