《密码技术与物联网安全:mbedtls开发实战》 —2.4 Linux mbedtls 示例
2.4 Linux mbedtls 示例
本节将通过两个示例说明如何在Linux平台构建mbedtls编写示例。第1个示例通过一个Base64示例说明如何使用CMake工具构建mbedtls应用。第2个示例将遍历mbedtls的所支持的安全套件,除了遍历安全套件之外,该示例还将通过修改mbedtls配置文件的方法,裁剪不必要的安全套件。
注意:由于篇幅限制,示例代码中只给出部分内容,具体示例代码可在本书代码仓库中查看,本章示例位于02_start/linux文件夹下。
2.4.1 Base64示例
Base64算法是一种基于64个字符的编码算法,它是一种以任意8位字节序列组合的描述形式,这种描述形式不易被人直接识别。Base64算法是一种可以把非ASCII编码数据转化为ASCII编码数据的方法。经过Base64编码之后的数据长度会比原始数据长度增加1/3。除此之外Base64编码算法还包括填充规则,编码之后的输出结果总是4字节的整数倍。与Base64编码算法类似的算法还有Base32编码算法和Base16编码算法,这些算法的详细说明可参考标准文件“RFC 4648 The Base16,Base32,and Base64 Data Encodings”。在该标准文件中,给出了3组Base64编码与解码样本数据,这些样本数据如表2-2所示。
虽然经过Base64编码之后的结果不能被直接识别,但是Base64并不是一种加密/解密算法,Base64仅仅是一种编码算法,它输出的结果并没有任何“保密性”。mbedtls中也包括Base64的具体实现,下面通过一个示例说明如何在Linux平台编写一个简单的mbedtls示例。
1.示例代码
示例的测试样本来自rfc3548,被编码的数据为一个字符数组,编码的结果为字符串形式的“FPucA9l+”。在输入数据中0xfb、0x9c、0xd9和0x7e并不能通过ASCII编码表示,但是输出结果却可通过ASCII编码表示。Base64示例如代码清单2-2所示。
代码清单2-2 Base64示例代码
示例中所使用接口的具体描述如表2-3所示。
表2-3 Base64 示例相关接口描述
2.编写 CMakeLists.txt
为了在Linux平台上构建一个可执行程序,还需要编写一个CMakeLists.txt文件,具体内容如代码清单2-3所示。
代码清单2-3 CMakeLists.txt 文件
1)设置CMake最低版本限制;
2)设置CMake工程名称为Base64;
3)通过include_directories函数指定mbedtls头文件路径,此处mbedtls头文件路径位于环境变量$ENV{MBEDTLS_BASE}中;
4)添加mbedtls源文件到MBEDTLS_SOURCES变量中,此处通过aux_source_directory函数找出mbedtls library中所有C文件,并把这些C文件路径输出至MBEDTLS_SOURCES变量中;
5)通过set函数定义一个名为SOURCES的变量,该变量包含所有mbedtls源文件以及示例代码base64.c;
6)定义可执行文件名为base64,该可执行文件依赖SOURCES变量。
3.编译与执行
编译与执行过程如下:
# 进入示例所在路径
$ cd 02_start/linux/base64
# 新建一个build文件夹,用于保存临时文件
$ mkdir –p build & cd build
# 生成makefile文件
$ cmake ..
$ make
# 执行示例
$ ./base64
base64 message: 14 fb 9c 03 d9 7e
base64 encode : FPucA9l+
base64 decode : 14 fb 9c 03 d9 7e
从输出的结果可以看出,一组不能被ASCII编码的数据被转化为可以完全被ASCII编码的字符串“FPucA9l+”。
- 点赞
- 收藏
- 关注作者
评论(0)