《密码技术与物联网安全:mbedtls开发实战》 —2.4 Linux mbedtls 示例

举报
华章计算机 发表于 2019/12/16 14:04:56 2019/12/16
【摘要】 本节书摘来自华章计算机《密码技术与物联网安全:mbedtls开发实战》 一书中第2章,第2.4.1节,作者是徐 凯 崔红鹏 。

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所示。

image.png

虽然经过Base64编码之后的结果不能被直接识别,但是Base64并不是一种加密/解密算法,Base64仅仅是一种编码算法,它输出的结果并没有任何“保密性”。mbedtls中也包括Base64的具体实现,下面通过一个示例说明如何在Linux平台编写一个简单的mbedtls示例。

1.示例代码

示例的测试样本来自rfc3548,被编码的数据为一个字符数组,编码的结果为字符串形式的“FPucA9l+”。在输入数据中0xfb、0x9c、0xd9和0x7e并不能通过ASCII编码表示,但是输出结果却可通过ASCII编码表示。Base64示例如代码清单2-2所示。

代码清单2-2 Base64示例代码

image.png

示例中所使用接口的具体描述如表2-3所示。

表2-3 Base64 示例相关接口描述

image.png

 

2.编写 CMakeLists.txt

为了在Linux平台上构建一个可执行程序,还需要编写一个CMakeLists.txt文件,具体内容如代码清单2-3所示。

代码清单2-3 CMakeLists.txt 文件

image.png

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+”。



【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。