一个简单的使用EVP框架的加密过程 aes 128 ecb
摘自:https://www.xuebuyuan.com/2145079.html
const EVP_CIPHER *cipher; unsigned char key[24],iv[8],in[100],out[108],de[100]; int i,len,inl,outl,total=0; EVP_CIPHER_CTX ctx; //此init做的仅是将ctx内存 memset为0 EVP_CIPHER_CTX_init(&ctx); cipher = EVP_aes_128_ecb(); //原型为int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv) //另外对于ecb电子密码本模式来说,各分组独立加解密,前后没有关系,也用不着iv EVP_EncryptInit_ex(&ctx, cipher, NULL, key, iv); inl=50; len=0; EVP_EncryptUpdate(&ctx,out+len,&outl,in,inl); //这个EVP_EncryptUpdate的实现实际就是将in按照inl的长度去加密,实现会取得该cipher的块大小(对aes_128来说是16字节)并将block-size的整数倍去加密。如果输入为50字节,则此处仅加密48字节,outl也为48字节。输入in中的最后两字节拷贝到ctx->buf缓存起来。 //对于inl为block_size整数倍的情形,且ctx->buf并没有以前遗留的数据时则直接加解密操作,省去很多后续工作。 len+=outl; EVP_EncryptUpdate(&ctx,out+len,&outl,in+50,inl); //同样的函数,但是先检查ctx->buf中有数据,则将in拷贝到buf之后,并进行同样的加解密操作(调用该cipher的do_cipher实现)。 len+=outl; EVP_EncryptFinal_ex(&ctx,out+len,&outl); //对于如本例所述,第一次除了了48字节余两字节,第二次处理了第一次余下的2字节及46字节,余下了输入100字节中的最后4字节。此处进行处理。如果不支持pading,且还有数据的话就出错,否则,将block_size-待处理字节数个数个字节设置为此个数的值,如block_size=16,数据长度为4,则将后面的12字节设置为16-4=12,补齐为一个分组后加密 对于前面为整分组时,如输入数据为16字节,最后再调用此Final时,不过是对16个0进行加密,此密文不用即可,也根本用不着调一下这Final。 len+=outl; EVP_CIPHER_CTX_cleanup(&ctx); //ctx上下文清理 综上仅对16及16字节倍数长度的输入加密时,只要Update就足够了,非要用Final的时候记得输出缓冲区大一点,超过输入长度的输出不用就行...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2019-03-23 svn设置提交忽略某些文件或文件夹
2018-03-23 Tomcat 如何部署多个应用
2018-03-23 vue前端+java后端 vue + vuex + koa2开发环境搭建及示例开发
2018-03-23 JavaEE资源
2018-03-23 java 学习路线
2018-03-23 想以编程为职业,现在正在看毕向东的java基础,接下来应该看什么视频,求前辈们指教。
2018-03-23 2017Java学习路线图,内附完整Java自学视频教程+工具经验+面试