openssl的aes128_ECB加密解密运算实例

devtools/2025/3/5 2:47:15/

aes128算法ECB接口

加密接口

注意事项:

  • EVP_EncryptInit_ex初始化算法EVP_aes_128_ecb(),和密钥,key至少16B
  • EVP_EncryptUpdate加密运算,tmplen输出已加密长度
  • EVP_EncryptFinal_ex结束运算,如果在此仍有加密运算,则加密长度tmplen需补充到密文长度中

int openssl_aes128_encrypt_ecb(unsigned char *key,unsigned char *iv, unsigned char *in_buf, int in_len, unsigned char *out_buf,int* out_len)
{EVP_CIPHER_CTX* ctx = NULL;ctx = EVP_CIPHER_CTX_new();int tmplen = 0;printf("%s %d\n", __func__, __LINE__);EVP_EncryptInit_ex(ctx, EVP_aes_128_ecb(), NULL, key, NULL);if (!EVP_EncryptUpdate(ctx, out_buf, &tmplen, in_buf, in_len)){EVP_CIPHER_CTX_free(ctx);return -1;}*out_len = tmplen;if (!EVP_EncryptFinal_ex(ctx, out_buf + *out_len, &tmplen)){EVP_CIPHER_CTX_free(ctx);return -2;}*out_len += tmplen;EVP_CIPHER_CTX_free(ctx);return 0 ;
}

解密接口

注意事项:

  • EVP_DecryptInit_ex初始化算法EVP_aes_128_ecb(),和密钥,key至少16B
  • EVP_DecryptUpdate解密运算,tmplen输出已解密长度
  • 如果剩余字节是16B,再次使用EVP_DecryptUpdate
  • 如果剩余字节不是16B整数倍,使用EVP_EncryptFinal_ex结束运算,输出加密长度tmplen补充到密文长度中
int openssl_aes128_decrypt_ecb(unsigned char *key,unsigned char *iv, unsigned char *in_buf, int in_len, unsigned char *out_buf,int* out_len)
{int ret = 0 ,tmplen = 0;EVP_CIPHER_CTX* ctx = NULL;ctx = EVP_CIPHER_CTX_new();EVP_CIPHER_CTX_set_padding(ctx, 0);printf("%s %d\n", __func__, __LINE__);EVP_DecryptInit_ex(ctx, EVP_aes_128_ecb(), NULL, key, NULL);if (!EVP_DecryptUpdate(ctx, out_buf, &tmplen, in_buf, in_len)){EVP_CIPHER_CTX_free(ctx);return -1;}*out_len = tmplen;if (in_len > tmplen) {if (!EVP_DecryptUpdate(ctx, out_buf+tmplen, &tmplen, in_buf+tmplen, in_len-tmplen)){//        RSP_TRACE("%s EVP_DecryptUpdate error \n", __func__);EVP_CIPHER_CTX_free(ctx);return -1;}*out_len += tmplen;}if (in_len %16!=0){ret = EVP_DecryptFinal_ex(ctx, out_buf+tmplen, &tmplen);fprintf(stderr, "err:\n");if (ret != 0){//        RSP_TRACE("%s EVP_DecryptFinal_ex error ret=%d\n", __func__, ret);EVP_CIPHER_CTX_free(ctx);return -2;}*out_len += tmplen;}EVP_CIPHER_CTX_free(ctx);return 0 ;
}

http://www.ppmy.cn/devtools/164632.html

相关文章

gradle libs.versions.toml文件

1.libs.versions.toml介绍2.创建libs.versions.toml文件3.libraries5.versions6.plugins7.bundles 1.libs.versions.toml介绍 下图是官网介绍 意思就是说项目所有插件和库的依赖版本都统一在这个文件配置。 文件中有以下四个部分 versions, 申明要使用的插件和库的版本号的…

机器学习:强化学习的epsilon贪心算法

强化学习(Reinforcement Learning, RL)是一种机器学习方法,旨在通过与环境交互,使智能体(Agent)学习如何采取最优行动,以最大化某种累积奖励。它与监督学习和无监督学习不同,强调试错…

Spring学习笔记03——Spring Boot的文件结构

Spring boot常见的文件结构: src/ ├── main/ │ ├── java/ │ │ └── com.example.demo/ │ │ ├── DemoApplication.java # 主入口 │ │ ├── config/ # 配置类 │ │ ├── controller/ …

【Qt】MVC设计模式

目录 一、搭建MVC框架 二、创建数据库连接单例类SingleDB 三、数据库业务操作类model设计 四、control层,关于model管理类设计 五、view层即为窗口UI类 一、搭建MVC框架 里面的bin、lib、database文件夹以及sqlite3.h与工程后缀为.pro文件的配置与上次发的文章…

R 语言科研绘图第 26 期 --- 密度图-基础

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…

P7使用pytorch实现马铃薯病害识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 我的环境 语言环境:python 3.7.12 编译器:pycharm 深度学习环境:tensorflow 2.7.0 数据:本地数据集 这次我们使…

C# Unity 唐老狮 No.3 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体…

【PHP】fastadmin中对addons进行路由重写

文章目录 概要技术细节 概要 公司的项目中使用了一个addons的cms插件,要求在这个插件的基础上做二次开发,新加了页面,发现url路径太难看了,默认是 addons/cms/index/calendar,想优化一下,但通过deepseek的…