千家信息网

基于mbedtls-1.3.14库的aes加解密以及base64编码与解码用法是什么

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章给大家介绍基于mbedtls-1.3.14库的aes加解密以及base64编码与解码用法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.1 最近项目要用到aes和
千家信息网最后更新 2025年02月01日基于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安全错误 数据库的锁怎样保障安全 中级数据库百度网盘 本溪本地app软件开发 封开软件开发技术在线咨询 数据库技术及应用习题鲁小丫 无锡进口服务器应用范围 数据库oracle怎么买 网络安全家长心得体会100字 好的python软件开发 mirnabase数据库打不开 神通数据库锁 计算机信息网络技术就业前景 璞缇客网络技术有限公司电话 甘肃激光套料软件开发商 中企成果获得网络安全杂志 网络安全和数据隐私培训 我的世界像素大陆服务器怎么圈地 数据库设计大作业题目大全及答案 数据库安装激活失败原因 广东国正科技软件开发 怎样用带外管理查服务器密码 安阳市网络安全座谈会 淮安江苏大容量服务器供应商家 棋牌软件开发的游戏公司 微软服务器会保存多久浏览历史 软件开发怎么转包 我的世界原初修真伏羲八卦服务器 2017网络安全威胁事件 数据库安装激活失败原因 一软件开发公司 海军软件开发标准
0