当前位置: 首页 > news >正文

openssl3.2 - 官方demo学习 - smime - smenc.c

文章目录

    • openssl3.2 - 官方demo学习 - smime - smenc.c
    • 概述
    • 笔记
    • END

openssl3.2 - 官方demo学习 - smime - smenc.c

概述

读取X509证书, 用PKCS7加密明文(证书 + 明文 + 3DES_CBC), 保存为MIME格式的密文

openssl API的命名含义

BIO_new_file
“new” a “file”, return a “BIO” object

PEM_read_bio_X509() Read a certificate in PEM format from a BIO
data format is “PEM”, “read” from “bio”, return a object type is “X509”

笔记

/*!
\file smenc.c
\note
openssl3.2 - 官方demo学习 - smime - smenc.c
读取X509证书, 用PKCS7加密明文(证书 + 明文 + 3DES_CBC), 保存为MIME格式的密文openssl API的命名含义BIO_new_file
"new" a "file", return a "BIO" objectPEM_read_bio_X509() Read a certificate in PEM format from a BIO
data format is "PEM", "read" from "bio", return a object type is "X509"
*//** Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.** Licensed under the Apache License 2.0 (the "License").  You may not use* this file except in compliance with the License.  You can obtain a copy* in the file LICENSE in the source distribution or at* https://www.openssl.org/source/license.html*//* Simple S/MIME encrypt example */
#include <openssl/pem.h>
#include <openssl/pkcs7.h>
#include <openssl/err.h>#include "my_openSSL_lib.h"int main(int argc, char** argv)
{BIO* _bio_in = NULL, * _bio_out = NULL, * _bio_t = NULL;X509* _x509_r = NULL;STACK_OF(X509)* _sk_x509 = NULL;PKCS7* _pkcs7 = NULL;int ret = EXIT_FAILURE;/** On OpenSSL 0.9.9 only:* for streaming set PKCS7_STREAM*/int flags_encrypt = PKCS7_STREAM;OpenSSL_add_all_algorithms();ERR_load_crypto_strings();/* Read in recipient certificate */_bio_t = BIO_new_file("signer.pem", "r");if (!_bio_t)goto err;_x509_r = PEM_read_bio_X509(_bio_t, NULL, 0, NULL);if (!_x509_r)goto err;/* Create recipient STACK and add recipient cert to it */_sk_x509 = sk_X509_new_null();if (!_sk_x509 || !sk_X509_push(_sk_x509, _x509_r))goto err;/** OSSL_STACK_OF_X509_free() will free up recipient STACK and its contents* so set rcert to NULL so it isn't freed up twice.*/_x509_r = NULL;/* Open content being encrypted */_bio_in = BIO_new_file("encr.txt", "r");if (!_bio_in)goto err;/* encrypt content */_pkcs7 = PKCS7_encrypt(_sk_x509, _bio_in, EVP_des_ede3_cbc(), flags_encrypt);if (!_pkcs7)goto err;_bio_out = BIO_new_file("smencr.txt", "w");if (!_bio_out)goto err;/* Write out S/MIME message */if (!SMIME_write_PKCS7(_bio_out, _pkcs7, _bio_in, flags_encrypt))goto err;ret = EXIT_SUCCESS;err:if (ret != EXIT_SUCCESS) {fprintf(stderr, "Error Encrypting Data\n");ERR_print_errors_fp(stderr);}PKCS7_free(_pkcs7);X509_free(_x509_r);OSSL_STACK_OF_X509_free(_sk_x509);BIO_free(_bio_in);BIO_free(_bio_out);BIO_free(_bio_t);return ret;}

END

http://www.lryc.cn/news/284431.html

相关文章:

  • 【EI会议征稿通知】第四届工业制造与结构材料国际学术会议(IMSM 2024)
  • mysql中建立一个用户,只能看到某个指定的数据库
  • 第2章 线程管理
  • 机器学习第二十六周周报 ARIMA Clustering model
  • 支持XP系统的最新firefox浏览器
  • Pytorch从零开始实战17
  • openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c
  • vue2使用 element表格展开功能渲染子表格
  • 一个简单的ETCD GUI工具
  • vue2 使用pdf.js 实现pdf预览,并可复制文本
  • REPLACE INTO
  • idea 安装免费Ai工具 codeium
  • 关于C#中的Select与SelectMany方法
  • CentOS上安装Mellanox OFED
  • 无/自监督去噪(1)——一个变迁:N2N→N2V→HQ-SSL
  • 【24.1.19】
  • 使用mamba替换conda和anaconda配置环境安装软件
  • 鸿蒙开发系列教程(四)--ArkTS语言:基础知识
  • Pix2Pix理论与实战
  • [GN] 后端接口已经写好 初次布局前端需要的操作(例)
  • AIGC:人工智能驱动的数据分析新时代
  • Windows Qt C++ VTK 借助msys环境搭建
  • 尚硅谷Nginx高级配置笔记
  • 论rtp协议的重要性
  • 【Github搭建网站】零基础零成本搭建个人Web网站~
  • unocss+iconify技术在vue项目中使用20000+的图标
  • python 自动化模块 - pyautogui初探
  • UE5 蓝图编辑美化学习
  • 基于动态顺序表实现通讯录项目
  • python使用jupyter记笔记