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

openssl3.2 - 官方demo学习 - cms - cms_denc.c

文章目录

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

openssl3.2 - 官方demo学习 - cms - cms_denc.c

概述

将CMS数据结构写入PEM文件, 并将分离后的加密数据单独写到数据文件.

笔记

/*! \file cms_denc.c
* \note openssl3.2 - 官方demo学习 - cms - cms_denc.c
* 将CMS数据结构写入PEM文件
*/ /** Copyright 2008-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*//** S/MIME detached data encrypt example: rarely done but should the need* arise this is an example....*/
#include <openssl/pem.h>
#include <openssl/cms.h>
#include <openssl/err.h>#include "my_openSSL_lib.h"int main(int argc, char **argv)
{BIO *in = NULL, *out = NULL, *tbio = NULL, *dout = NULL;X509 *rcert = NULL;STACK_OF(X509) *recips = NULL;CMS_ContentInfo *cms = NULL;int ret = EXIT_FAILURE;int flags = CMS_STREAM | CMS_DETACHED;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;/** OSSL_STACK_OF_X509_free() 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");dout = BIO_new_file("smencr.out", "wb");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.pem", "w");if (!out)goto err;if (!CMS_final(cms, in, dout, flags))goto err;/* Write out CMS structure without content */if (!PEM_write_bio_CMS(out, cms))goto err;ret = EXIT_SUCCESS;err:if (ret != EXIT_SUCCESS) {fprintf(stderr, "Error Encrypting Data\n");ERR_print_errors_fp(stderr);}CMS_ContentInfo_free(cms);X509_free(rcert);OSSL_STACK_OF_X509_free(recips);BIO_free(in);BIO_free(out);BIO_free(dout);BIO_free(tbio);return ret;
}

END

相关文章:

  • scroll-view在小程序页面里实现滚动,uniapp项目
  • Leading Dimension是什么
  • MyCAT相关问题及答案(2024)
  • 算法通关村第十一关—位运算如何实现压缩存储(黄金)
  • 连接数问题
  • Rust-函数
  • 玩转 Go 生态|Hertz WebSocket 扩展简析
  • 【Databend】多表联结,你不会还没有掌握吧!
  • 12.2内核空间基于SPI总线的OLED驱动
  • 排序算法-希尔排序
  • Oracle 基本命令
  • P1125 [NOIP2008 提高组] 笨小猴——C++
  • Redis面试题14
  • Android Canvas图层saveLayer剪切clipPath原图addCircle绘制对应圆形区域并放大,Kotlin(3)
  • 8. 自定义分页
  • co模块的前端实现
  • Docker下部署自己的LNMP工作环境
  • ES6之路之模块详解
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Java知识点总结(JavaIO-打印流)
  • KMP算法及优化
  • miaov-React 最佳入门
  • overflow: hidden IE7无效
  • Vue ES6 Jade Scss Webpack Gulp
  • Vue2.0 实现互斥
  • 规范化安全开发 KOA 手脚架
  • 后端_MYSQL
  • 使用Gradle第一次构建Java程序
  • 使用SAX解析XML
  • 微信小程序--------语音识别(前端自己也能玩)
  • 一道面试题引发的“血案”
  • 主流的CSS水平和垂直居中技术大全
  • Nginx实现动静分离
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 湖北分布式智能数据采集方法有哪些?
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # SpringBoot 如何让指定的Bean先加载
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (4) PIVOT 和 UPIVOT 的使用
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (翻译)terry crowley: 写给程序员
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (五)关系数据库标准语言SQL
  • **PHP分步表单提交思路(分页表单提交)
  • .NET Core 版本不支持的问题
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net wcf memory gates checking failed
  • .net操作Excel出错解决