C语言 openssl库 AES对称加解密 CBC模式 PKCS7Padding填充 256秘钥 带16偏移 base64编解码_c语言实现sm4pkcs7填充-程序员宅基地

技术标签: PKCS7Padding  CBC  openssl  AES加密  C语言学习  base64编码  

最近学习对接平台 需要用到 AES BASE64 加密对接接口
非常少的资料
而且满足不了需要或者有bug,譬如无偏移,base解码超位数输出不正常等
最后整理出如标题所示的结果
希望能帮助到有需要的朋友 也给自己往后回顾用

使用前需要安装openssl库

使用方法:
<./aes 数据> <例子:./aes test> <注意:有空格会被当成多个参数>

功能介绍:
1.对数据进行PKCS7Padding填充
2.进行AES CBC 加密 数据块128bit 秘钥32位(256bit)
3.对加密数据进行base4编码

关于openssl:
编译命令:gcc aes.c -o aes -lssl -lcrypto

自行搜索安装openssl库的方法

测试验证网站:
http://tool.chacuo.net/cryptaes
CBC pkcs7padding 128 E10ADC3949BA59ABBE56E056F20F883E E10ADC3949BA59AB base64 utf-8

#include <stdio.h>
#include <string.h>
#include <unistd.h>
 
#include "openssl/pem.h"
#include "openssl/aes.h"
// #include "openssl/bio.h"
// #include "openssl/evp.h"

#define KEY_BLOCK_BIT 33
#define IV_BLOCK_BIT 17
/*
这个是你自己写的一个十六字节的秘钥,aes加密解密都用这同一个
命令:find /usr/include/ -name *.h | xargs grep 'AES_BLOCK_SIZE'
结果:/usr/include/openssl/aes.h:# define AES_BLOCK_SIZE 16
//256下 key为秘钥32 iv为偏移16
*/

unsigned char key[KEY_BLOCK_BIT] = "E10ADC3949BA59ABBE56E056F20F883E"; ///usr/include/openssl/aes.h:# define AES_BLOCK_SIZE 16 
unsigned char iv[IV_BLOCK_BIT] = "E10ADC3949BA59AB";

#define AES_BITS 10240
#define MSG_LEN 10240
 
/**********************************************************
函数名:getlen           
参数:char *str        --字符串地址
返回值:int            --字符串长度
说明:输入字符串地址获取字符串长度
***********************************************************/
int getlen(char *str) {
    int i = 0;
    while (str[i] != '\0') {
        i++;
    }
    return i;
}
/**********************************************************
函数名:PKCS7Padding          
参数:unsigned char *str      --字符串地址
返回值:int                   --正向
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38916259/article/details/101123192

智能推荐

计算职工工资(JAVA)求助!-程序员宅基地

文章浏览阅读211次,点赞7次,收藏5次。给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。

1688阿里巴巴平台 API接口 接入文档说明_1688接口文档-程序员宅基地

文章浏览阅读388次,点赞8次,收藏9次。阅读文档:阿里巴巴平台提供了详细的API接口文档,包括接口的使用方法、参数说明、返回结果等。详细的接口说明和使用方法请参考阿里巴巴开放平台官方网站的API接口文档。阿里巴巴平台提供了一系列的API接口,用于接入和使用阿里巴巴平台的各种功能和服务。注册账号:在使用API接口之前,需要先注册一个阿里巴巴平台账号。请求API接口:可以通过发送HTTP请求调用API接口。可以通过使用API密钥和签名算法生成签名。授权认证:在使用API接口之前,需要进行授权认证。获取API密钥:在注册账号后,需要获取API密钥。_1688接口文档

Spring RestTemplate post方法-程序员宅基地

文章浏览阅读539次。好久没写没写博客了,这个习惯可不能丢。学习还是需要不断积累的。三流程序员更不能懈怠。感觉似乎立即就要被淘汰。Spring RestTemplate Post方法因为项目本身就是使用为服务架构,所以不可避免地使用了spring boot的东西。现在关于面向资源的restful这么流行,所以老板说啥就是啥了。是一个接口需要升级,以前的一些json参数需要调整,url地址也发生了变化。(另一个团..._spring resttemplate post

ES6--箭头函数-程序员宅基地

文章浏览阅读1.7k次。ES6--箭头函数this转自ES6标准新增了一种新的函数:Arrow Function(箭头函数)。为什么叫Arrow Function?因为它的定义用的就是一个箭头:x => x * x上面的箭头函数相当于:function (x) { return x * x}箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有两种格式,一种像上面的,只包含一个表达式(放在同一行..._es6--箭头函数

java实现Oracle批量数据传输-jdbc方式_oracle批处理java-程序员宅基地

文章浏览阅读946次。废话不多说,直接上代码:import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class TestService { publ._oracle批处理java

css中em和rem的区别-程序员宅基地

文章浏览阅读81次。在css中单位长度用的最多的是px、em、rem,这三个的区别是:  px是固定的像素,一旦设置了就无法因为适应页面大小而改变。  em和rem相对于px更具有灵活性,他们是相对长度单位,意思是长度不是定死了的,更适用于响应式布局。对于em和rem的区别一句话概括:em相对于父元素,rem相对于根元素。rem中的r意思是root(根源),这也就不难理解了。em..._css rem 与 em的区别

随便推点

梯度与切向量_梯度是切向量还是法向量-程序员宅基地

文章浏览阅读3.2k次。之前一直错误的认为了切向量就是梯度,由于最近在看拉格朗日的方法,正好遇到这个问题,结果搞清楚了切向量和梯度的关系。简单的来说切向量和梯度都是求导数,但是要看的是对谁求导数。举个例子:y=x^2吧,简单点的。求在点(a,b)处的切向量。此时需要写成参数式x=x 并且 y=x^2,分别对x求导数得到(1, 2x)把(a,b)带入即可。求点(a,b)处的梯度。此时需要写成f(x,y)=x^2-y,分别对..._梯度是切向量还是法向量

LLMs:《A Survey on Evaluation of Large Language Models大型语言模型评估综述》理解智能本质(具备推理能力)、AI评估的重要性(识别当前算法的局限性+设-程序员宅基地

文章浏览阅读3.3k次,点赞7次,收藏15次。​LLMs:《A Survey on Evaluation of Large Language Models大型语言模型评估综述》翻译与解读LLMs:大型语言模型评估研究综述—理解智能本质(具备推理能力)、AI评估的重要性(识别当前算法的局限性+设计更强大模型的关键工具)、评估LLMs的四大意义、三维度(What+Where+How)综述LLMs评估、LLMs大语言模型的三大关键(Transformer+RLHF+提示工程)、评估LLMs任务六大类(NLURG+REBT+SS+NS+MA+Agent_a survey on evaluation of large language models

Tomcat报错 java.lang.IllegalStateException: 鍚姩瀛愮骇鏃跺嚭閿�_鍚 姩瀛愮骇鏃跺嚭閿-程序员宅基地

文章浏览阅读2.3k次。如果在IDEA上运行Tomcat报错java.lang.IllegalStateException: 鍚姩瀛愮骇鏃跺嚭閿� 那么就要检查自己的web.xml文件或者pro.xmlwen'jian_鍚 姩瀛愮骇鏃跺嚭閿

移植linux4.14内核到四核Exynos4412开发板_linux内核移植-程序员宅基地

文章浏览阅读668次。最近法师收到了很多留言,其中有一部分问法师什么时候更新,还有一大部分问法师我是买迅为的IMX6UL精英版好呢还是买4412精英版好呢,因为我们这俩个都不贵。法师的建议的是入手4412!为什么呢? 第一,4412是三星第一款经典处理器,为三星创造了辉煌,是当年在国内红得发紫的GalaxyS3手机的主控,他的出现,开启了手机和平板的四核时代,让手机和平板变得流畅,可以说,到目前为止,4..._linux内核移植

Oracle 数据库中删除表空间的详细步骤与示例-程序员宅基地

文章浏览阅读5.7k次,点赞3次,收藏13次。在 Oracle 数据库中,表空间是存储数据的逻辑容器。有时候,我们可能需要删除不再使用的表空间以释放空间或进行数据库重组。本文将详细介绍在 Oracle 数据库中删除表空间的步骤和示例代码。通过本文,你已经了解了在 Oracle 数据库中删除表空间的详细步骤和示例代码。删除表空间是一个敏感且重要的操作,请在进行操作前充分备份和测试,以确保数据的安全和稳定。希望本文对你在 Oracle 数据库管理中的工作有所帮助。如果你有任何问题或疑问,欢迎留言讨论。_删除表空间

stm32外部内存的使用_stm32f 外置内存-程序员宅基地

文章浏览阅读843次。申请某些较大的结构体数组时,直接使用32可能会因为内存不足报错,此时可以尝试使用外部内存SRAM,使用代码如下struct Radar_data Radar[RA_SPACE] attribute((at(0x68000220))); //雷达数据#define NEXT1ADDR 0x68000220+sizeof(struct Radar_data)*RA_SPACEstruct TIS_area TisArea[TIS_SPACE] attribute((at(N_stm32f 外置内存

推荐文章

热门文章

相关标签