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

OpenSSL EVP编程介绍

What

EVP 接口(Envelope Public Key Cryptography,信封公钥密码学)是 OpenSSL 提供的一套统一的高层密码学 API,它封装了底层的对称加密、非对称加密、哈希、签名验签等所有核心操作,旨在让开发者无需关注底层算法细节,就能安全、高效地实现密码学功能。

How to use

EVP接口的设计架构围绕着Context对象展开。无论何种操作(加密、解密、签名、验签),都要先创建Context对象,然后将操作中使用到的信息(公钥、IV等)都设置到Context对象中,然后使用该Context进行操作。
下面以RSA加密、解密为例进行说明:

  1. 获取密钥对象pkey,有多种方式如d2i_PUBKEY(nullptr, &p, public_key.size());,该接口可以直接解析DER格式的公钥
  2. 创建Context对象,通过`EVP_PKEY_CTX_new(pkey, nullptr);``。
  3. 初始化Context对象,通过EVP_PKEY_decrypt_init(ctx);
  4. 设置Padding类型,通过EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING);
  5. 加密获取密文长度,通过EVP_PKEY_encrypt(ctx, NULL, &outlen, plaintext.data(), plaintext.size())
  6. 加密获取密文,通过EVP_PKEY_encrypt(ctx, ciphertext.data(), &outlen, plaintext.data(), plaintext.size())
  7. 释放密钥对象,通过EVP_PKEY_free(pkey);
  8. 释放Context对象,通过EVP_PKEY_free(pkey);

Tips

不同类型的Context对象

不同的操作对应不同的Context对象,对应的EVP接口前缀也不一样。

  • 非对称加密(RSA、SM2等)的Context类型,EVP_PKEY_CTX。
  • 对称加密(AES、SM4等)的Context类型,EVP_CIPHER_CTX。
  • 摘要计算(MD5、SM3、SHA等)的Context类型,EVP_MD_CTX。

关于SM2withSM3

对于SM2withSM3,使用EVP_MD_CTX类型的Context

  1. 初始化Context:EVP_MD_CTX_new();
  2. 初始化Context:EVP_DigestSignInit(mctx, nullptr, EVP_sm3(), nullptr, pkey)
  3. 更新签名数据:EVP_DigestSignUpdate(mctx, plaintext.data(), plaintext.size())
  4. 结束签名:EVP_DigestSignFinal(mctx, signature.data(), &sig_len)

关于AES的Block大小

AES的block大小跟密钥长度无关固定为16字节

http://www.dtcms.com/a/486104.html

相关文章:

  • 网站服务器组建中国国际贸易网站
  • 上新!功夫系列高通量DPU卡 CONFLUX®-2200P 全新升级,带宽升 40% IOPS提60%,赋能多业务场景。
  • Spring Boot 3零基础教程,properties文件中配置和类的属性绑定,笔记14
  • 以数据智能重构 OTC 连锁增长逻辑,覆盖网络与合作生态双维赛跑
  • 【推荐100个unity插件】基于节点的程序化无限地图生成器 —— MapMagic 2
  • 71_基于深度学习的布料瑕疵检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 工控机做网站服务器网络模块
  • Mac——文件夹压缩的简便方法
  • Playwright自动化实战一
  • 电商网站开发面临的技术问题做seo网站诊断书怎么做
  • 【Qt】QTableWidget 自定义排序功能实现
  • WPF 疑点汇总2.HorizontalAlignment和 HorizontalContentAlignment
  • 【Qt】3.认识 Qt Creator 界面
  • 垂直网站建设付费小说网站怎么做
  • PDFBox - PDDocument 与 byte 数组、PDF 加密
  • 【Pytorch】分类问题交叉熵
  • 如何轻松删除 realme 手机中的联系人
  • Altium Designer怎么制作自己的集成库?AD如何制作自己的原理图库和封装库并打包生成库文件?AD集成库制作好后如何使用丨AD集成库使用方法
  • Jackson是什么
  • 代码实例:Python 爬虫抓取与解析 JSON 数据
  • 襄阳建设网站首页百度知识营销
  • 山东住房和城乡建设厅网站电话开发软件都有哪些
  • AbMole| Yoda1( M9372;GlyT2-IN-1; Yoda 1)
  • LLM监督微调SFT实战指南(Qwen3-0.6B-Base)
  • 【基础算法】多源 BFS
  • *@UI 视角下主程序与子程序的菜单页面架构及关联设计
  • Virtio 半虚拟化技术解析
  • 网站设计怎么好看律师做网络推广哪个网站好
  • 用commons vfs 框架 替换具体的sftp 实现
  • 网站模板怎么设计软件wordpress多重筛选页面