跳转到内容

BASE64 编码/解码

1.1. BASE64 编码/解码概述

Base64 是网络上传输 8 位字节码时最常用的编码方式之一,是一种基于 64 个可打印字符来表示二进制数据的方法。EASY EAI api 对 BASE64 编码/解码工具进行了封装并提供给用户,使用户可以方便地对数据进行 BASE64 封装。

1.2. 快速开始

1.2.1 开发环境准备

在 PC 上的 Ubuntu 系统中执行 run 脚本,进入 EASY-EAI 编译环境。详细如下。

Terminal window
cd ~/develop_environment
./run.sh 2204

1.2.2 下载源码并编译示例

在 EASY-EAI 编译环境下,创建用于管理源码仓库的目录。

Terminal window
cd /opt
mkdir EASY-EAI-Toolkit
cd EASY-EAI-Toolkit

https://dl.dragonwake.com/download/rv1126b/embedded/EASY-EAI-Toolkit-1126B/Demos.zip

从上述链接下载 Demos.zip 压缩文件,并上传到虚拟机的 /opt/EASY-EAI-Toolkit 目录中后解压。 进入对应示例目录并执行编译操作。具体命令如下。

Terminal window
cd EASY-EAI-Toolkit-1126B/Demos/common-base64/
./build.sh

💡 注意:由于依赖库放置在开发板上,交叉编译过程中请务必保持 /mnt 挂载。

1.2.2 下载源码并编译示例 图17

1.2.2 下载源码并编译示例 图17

1.2.3 运行示例

通过串口调试或 SSH 调试进入开发板后台,并移动到示例所在位置。如下所示。

Terminal window
cd /userdata/Demo/common-base64

运行示例的命令如下。

Terminal window
./test-base64

1.2.4 运行结果

运行结果如下所示。

1.2.4 运行结果 图18

1.2.4 运行结果 图18

1.3. BASE64 编码/解码 API 说明

1.3.1 包含/引用方式

EASY EAI api 库位于本仓库的 easyeai-api 目录中。为了方便用户在本地项目中直接调用 EASY EAI api 库,下面列出了项目中需要链接的库、头文件等内容。

说明CMake 中的写法Makefile 中的写法
api.cmake${common_root}/base64/api.cmake
头文件目录${BASE64_INCLUDE_DIRS}-I ../../easyeai-api/common/base64
源文件目录${BASE64_SOURCE_DIRS}../../easyeai-api/common/base64
库文件目录
库链接参数${BASE64_LIBS}

API 源代码路径为 EASY-EAI-Toolkit-1126B/easyeai-api/common/base64/。用户可以通过源码查看接口的实现,也可以直接修改源码。

1.3.2 BASE64 编码操作

编码函数原型如下。

Terminal window
int32_t base64_encode(char \*out_data, const char\* in_data, unsigned int in_len);

具体说明如下。

函数名:base64_encode()详情
头文件easyeai-api/common/base64/base64.h
输入参数out_data:编码后的 BASE64 数据
in_data:编码前的原始数据
in_len:原始数据中需要进行编码部分的长度
返回值编码后生成的 BASE64 字符串长度
注意事项通常编码后的数据大小至少会比编码前的数据增加 1/3。具体来说,会变为将输入数据大小向上取整到 3 的倍数后所得大小的 4/3。

1.3.3 BASE64 解码操作

解码函数原型如下。

Terminal window
int32_t base64_decode(char \*out_data, unsigned int out_len, const char\* encoded_string);

具体说明如下。

函数名:base64_decode()详情
头文件easyeai-api/common/base64/base64.h
输入参数out_data:解码后的数据
out_len:用于存放解码后数据的内存最大长度
encoded_string:待解码的数据(字符串)
返回值解码后得到的数据长度
注意事项

1.4. BASE64 操作 API 使用示例

示例代码路径为 EASY-EAI-Toolkit-1126B/Demos/common-base64/test-base64.c。

示例 1:将字符串进行 BASE64 编码,然后再对得到的编码数据进行解码。

char *cStr = "my name is hao";
char base64_data[1024] = {0};
char src_string[1024] = {0};
memset(base64_data, 0, sizeof(base64_data));
base64_encode(base64_data, cStr, strlen(cStr));
printf("encode data : %s\n", base64_data);
base64_decode(src_string, sizeof(src_string), base64_data);
printf("source string : %s\n", src_string);

示例 2:验证数据中包含 0x00 的情况,并确认还原后的数据 不会在 0x00 的位置被截断。

char num_data[8] = {0x67, 0x88, 0x70, '\0', '\r', '\n', 0x73,
0x73};
char decode_data[8] = {0};
memset(base64_data, 0, sizeof(base64_data));
base64_encode(base64_data, num_data, sizeof(num_data));
printf("encode data : %s\n", base64_data);
base64_decode(decode_data, sizeof(decode_data), base64_data);
printf("source string : 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x
0x%02x 0x%02x\n",
decode_data[0], decode_data[1], decode_data[2], decode_data[3],
decode_data[4], decode_data[5], decode_data[6],
decode_data[7]);