使用mbedtls的使用说明和AES加密方法(原来的PolarSSL)

Posted 付栋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用mbedtls的使用说明和AES加密方法(原来的PolarSSL)相关的知识,希望对你有一定的参考价值。

关于PolarSSL

mbed TLS(以前称为PolarSSL)是TLS和SSL协议的实现,并且需要相应的加密算法和支持代码。这是双重许可Apache许可证 2.0版(与GPLv2许可也可)。网站上指出,mbed TLS的目标是“易于理解,使用,集成和扩展”

核心SSL C编程语言编写,并实现SSL模块,基本加密功能并提供各种实用功能。OpenSSL和TLS的其他实现不同,mbed TLS设计为适合小型嵌入式设备,最小完整的TLS堆栈需要60KB的程序空间和64KB的RAM。它也是高度模块化的:每个组件,如加密函数,可以独立于框架的其余部分使用。版本也可用于Microsoft WindowsLinux。因为mbed TLS是用C编程语言编写的,没有外部依赖,

PolarSSL的后期版本超过1.3.0,为内核分配和线程添加抽象层,以“支持与现有嵌入式操作系统的更好集成”——机器翻译的凑合着看。想看原版的自行Wikii

现在叫MbedTSL,PolarSSL源码,也许是最小巧的ssl代码库。高效、便于移植和集成。尤其适合嵌入式应用。

也就是说,无论是嵌入式还是桌面软件版的编程,只要你用的到AES,RSA等加密算法,你都可以直接拿过来源码放进你的工程中,进行编译管理,不用带着DLL,或者必须安装一些不必要的库,并且算法是标准库,所以你懂得。并且OpenSource。

关于代码的引用

之前搞了半天,谷歌,百度,冰,都用了,我竟然没找到一篇加入代码的资料,不知道是不是因为这个太简单还是怎么样,反正我是在这个地方饶了很大的圈子,下面就把使用的方法说一下,方便后来者不用费劲。

1、首先可以静态编译,然后引用

就是在下载下来之后(下载地址(上不去的自行翻·qiang):tls.mbed.org

解压

你会发现如下:

OK,如果windows环境编译的话,那就直接“visualc”文件夹,一堆VC++ project文件,剩下的事情,我不想说了,有VS201x的话,打开直接F5,会编译出*.lib文件,剩下的引用就是引用静态库的内容。

2、如果你想把这些源码直接加入工程中

请看这个

“include”里面放的是库的头文件,“library”里面放的是源文件

库文件直接拷入到你的工程文件夹

头文件需要麻烦点:需要打开——拷贝“mbedtls”文件夹放入你的工程文件

 

 

放入之后

如果是VS

你需要做的就是:选项——属性——C++?——附加包含目录——添加——选中mbedtls的上一级文件

为什么需要上一级文件,因为头文件里面有很多这样的头文件引用:#include“mbedtls/config.h”,你不这样引用会搞事情的。

然后,连接器——附加库目录——添加library目录进入

剩下的事情就变得简单了,只需要拿来就用就好了。

 

 这中间有一个坑:就是你在使用别人的aes & rsa算法的时候,有些声明,因为版本的问题会失效。这个时候你还需要使用的一个头文件就是:

compat-1.3.h

这里面就是一些#define   ***      ***,不用它会说你没声明???!!!

 

如果是GCC编译器使用CodeBlocks的话,你需要做也是把头文件目录,库文件目录相应的设置好,然后在使用。这个库一定是能够加入你的源码进行编译的,你需要相信这一点。

3、关于Aes算法

因为我只用了Aes算法,所以这里大体说说思路,我们知道Aes算法是对称加密的算法分为以下几种模式:

EBC:就是把数据块进行加密,没8或者16为一块,进行依次加密,知道完成,不足的补0

CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或操作后再加密,这样做的目的是增强破解难度。

CFB/OFB实际上是一种反馈模式,目的也是增强破解的难度

参考:http://blog.csdn.net/aaaaatiger/article/details/2525561

如果你只用EBC:

那么打开aes.h,你可以看到:

你只用这个就够了,但是,但是这里只能输入输出16位,也就是说,你需要自己分块,不够的自己补全0,凑够16位。

过程:

  1、声明这个结构体

  mbedtls_aes_context

  2、对结构体进行初始化

  void mbedtls_aes_init( mbedtls_aes_context *ctx );

  3、对加密Key进行设置

  int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key,
  unsigned int keybits );

  4、使用这个函数进行加密,记得只能加密16个字符,包括‘\\0’,所以你需要分割字符串

  int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx,
  int mode,
  const unsigned char input[16],
  unsigned char output[16] );

过程就是这个过程,如果你需要这个详细的资料,自行查看aes.h,里面虽然是英文的但是介绍还是听详细的。

其他模式 我也没用过(我没在怕的,哼!)

4、如果你要加密用于网络传输,记得这个:base64.h

这里面是base64的算法,直接可用

画框的都是重点有大用处。

 OK,先这样,想到什么在补充

以上是关于使用mbedtls的使用说明和AES加密方法(原来的PolarSSL)的主要内容,如果未能解决你的问题,请参考以下文章

mbedtls 和 openssl 之间的不同 AES-256 加密输出

如何正确使用来自 mbedtls 的 aes cbc api

基于MbedTLS的AES加密实现,含STM32H7和STM32F4的实现例程

STM32F4系列单片机上使用CUBE配置MBEDTLS实现pem格式公钥导入

用Java实现AES加密(转)

mbedtls安装与入门