基于mbedtls-1.3.14库的aes加解密以及base64编码与解码用法是什么
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇文章给大家介绍基于mbedtls-1.3.14库的aes加解密以及base64编码与解码用法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.1 最近项目要用到aes和
千家信息网最后更新 2024年11月26日基于mbedtls-1.3.14库的aes加解密以及base64编码与解码用法是什么
这篇文章给大家介绍基于mbedtls-1.3.14库的aes加解密以及base64编码与解码用法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
1.1 最近项目要用到aes和base64,基于mbedtls-1.3.14库来介绍一下aes和base64的用法,并写一个测试用例
1.2 用法
aes加密,base64输出
void AesEncryptAndOutBase64(const unsigned char *InBuf,int InBufLen,const unsigned char *AesKey,unsigned char *OutBuf){ unsigned char iv[IV_SIZE] = {0}; memcpy(iv,AesKey,IV_SIZE); aes_context aes_enc; aes_init(&aes_enc); unsigned char pt_buf[8000] = {0}; int i = 0; for(i; i < InBufLen; i++) { pt_buf[i] = InBuf[i]; } //不够16字节的剩余部分,填充 int index = InBufLen; int pading = 16 - (index % 16); for(i = 0; i < pading; i++) { pt_buf[index + i] = pading; } int ret = -1; ret = aes_setkey_enc(&aes_enc,AesKey,AES_KEY_SIZE); if (ret != 0) { DEBUG_INFO("set aes key failed,ret=%d",ret); return; } ret = aes_crypt_cbc(&aes_enc,AES_ENCRYPT,index+pading,iv,pt_buf,pt_buf); if (ret != 0) { DEBUG_INFO("aes cbc en failed,ret=%d",ret); return; } #if 1 printf("aes en after:"); for(i = 0; i < index + pading; i++) { printf("x",pt_buf[i]); } printf("\n"); #endif size_t n = 0; //第一个参数为NULL,表示获取密文长度 base64_encode(NULL,&n,pt_buf,index + pading); //第二次真正解码 ret = base64_encode(OutBuf,&n,pt_buf,index + pading); if (ret != 0) { DEBUG_INFO("baae64 encode failed,ret=%d",ret); return; } DEBUG_INFO("aes en,base64 encode out:%s",OutBuf);}
base解码,aes解密
int DecryptBas64Aes(const unsigned char *Base64 ,const unsigned char* AesKey , unsigned char * OutBuf){ size_t n = 0; int ret = -1; unsigned char base64_de_out[8000] = {0}; //第一个参数为NULL,表示获取密文长度 base64_decode(NULL,&n,Base64,strlen(Base64)); //第二次真正解码 ret = base64_decode(base64_de_out,&n,Base64,strlen(Base64)); if (ret != 0) { DEBUG_INFO("base de failed,ret=%d",ret); return -1; } #if 1 DEBUG_INFO("base de after:"); int i = 0; for(i = 0; i < n; i++) { printf("x",base64_de_out[i]); } printf("\n"); #endif unsigned char iv[IV_SIZE] = {0}; memcpy(iv,AesKey,IV_SIZE); aes_context aes_dec; aes_init(&aes_dec); ret = aes_setkey_dec(&aes_dec,AesKey,AES_KEY_SIZE); if (ret != 0) { DEBUG_INFO("set aes key dec failed,ret=%d",ret); return -1; } //aes解密 ret = aes_crypt_cbc(&aes_dec,AES_DECRYPT,n,iv,base64_de_out,OutBuf); if (ret != 0) { DEBUG_INFO("aes en failed,ret=%d",ret); return -1; } //有时解密失败,会导致填充部分的index异常(大于整个数组长度,或者小于0),为了防止数组越界,这里作一下判断 if(OutBuf[n-1] > n || OutBuf[n-1] < 0) { OutBuf[0]='\0'; return -1; } //最后一个字符填充'\0',不然用strcmp不能比较 int Num = n-OutBuf[n-1]; OutBuf[Num]='\0'; DEBUG_INFO("aes de %s",OutBuf); return Num;}
测试
void TestAes(void){ char AesKey[17] = {"1234567887654321"}; char *InBuf = "abcdef明文"; char EnOutBuf[1024] = {0}; char DeOutBuf[1024] = {0}; AesEncryptAndOutBase64(InBuf,strlen(InBuf),AesKey,EnOutBuf); DecryptBas64Aes(EnOutBuf,AesKey,DeOutBuf); DEBUG_INFO("%s",DeOutBuf);}
int main(void){ TestAes(); return 0;}
1.3运行结果
关于基于mbedtls-1.3.14库的aes加解密以及base64编码与解码用法是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
编码
内容
参数
密文
更多
长度
帮助
测试
不错
不够
兴趣
字符
字节
小伙
小伙伴
文章
明文
知识
篇文章
结果
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
常用的网络安全模拟有哪些
通滩小学纪念网络安全
软件开发公司起什么名字好听
网络安全日设立
幼儿园网络安全反馈话术
2020年网络安全汇报
联通apn服务器
数据库换格式
阳泉网络技术服务价格
lfs缓存服务器
网络安全宣传作品简介
戴尔t330塔式服务器
建立数据库的用途
软件开发公司技术部职责
贵州pdu服务器电源什么牌子好
拱墅区物流软件开发
阜阳深信服网络安全
苹果服务器被黑
宝山区游戏软件开发
兴业银行软件开发中心
信号满格无法连接到服务器怎么办
通滩小学纪念网络安全
网络安全写话作文
深圳市炬天下网络技术
神武 未能成功连接服务器
上海培训软件开发哪家好
导入数据库后修改数据库
软件开发 发展路径
网络安全技术与5G
描写网络安全防护的诗句