コンテンツにスキップ

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
  • ダウンロードリンク: 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 エンコード操作

エンコード関数のプロトタイプは以下の通りです。

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 デコード操作

デコード関数のプロトタイプは以下の通りです。

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]);