mbedtls

概述

mbedtls github
mbedtls实现常用的加密/解密算法,X.509证书操作以及TLS/DTLS 协议。它的各个功能模块相对独立、耦合低,可以通过配置宏定义裁剪,非常适合用于嵌入式系统。mbedTLS是高度模块化的设计:每个组件,如加密函数,可以独立于框架的其余部分使用。mbedTLS完全是由C语言编写的,没有外部依赖,因此,mbedTLS是应用于嵌入式系统最理想的TLS加密算法库。更重要的一点是,mbedTSL是完全OpenSource的,支持Apache 2.0 license 或者GPL 2.0 license双重许可,可以自由应用于商业项目中。

编译

mbedtls主要有四个目录:

configs 是mbedtls参考的配置文件
include 是源码头文件,mbedtls的默认配置头文件是config.h就在这里面
library 是源码C文件,mbedtls的实现
programs 是一些示例,pkey目录包含rsa、证书加解密等。

mkdir build
cd build
cmake .. & make

生成的library中包含共享库:

libmbedcrypto.a libmbedtls.a libmbedx509.a

programs/pkey目录用于测试证书/RSA加解密:

./gen_key rsa_keysize=1024
./key_app_writer mode=private  output_mode=public output_file=pub.pem
openssl rsa -pubin -inform PEM -text -noout < pub.pem
./pk_encrypt pub.pem hello
./pk_decrypt keyfile.key

测试工程

新创建工程目录如mbedtls_ws,并在此目录下创建

include library project

拷贝库目录下的include到当前目录include,生成的共享库拷贝到library,project下可以创建多个测试工程。

├── include
│   └── mbedtls
├── library
│   ├── libmbedcrypto.a
│   ├── libmbedtls.a
│   └── libmbedx509.a
└── project
    ├── aes
    ├── base64
    ├── rsa
    └── rsa_decryp

每个工程下包含Makefile文件

PRJ_DIR         :=$(PWD)
SDK_DIR		    :=$(PRJ_DIR)/../..
LIBS_DIR        :=$(SDK_DIR)/library
INCDIRS		    :=$(SDK_DIR)/include

CROSS_COMPILE   ?=
CC              := $(CROSS_COMPILE)gcc
CFLAGS		    :=-I$(INCDIRS) -L$(LIBS_DIR) -lmbedcrypto -lmbedtls -lmbedx509


SRC = $(wildcard *.c)
BIN = $(SRC:%.c=%)
 
all : ${BIN}
 
${BIN}:%:%.c
	${CC} $^ -o $@ $(CFLAGS)
 
clean:
	rm -rf ${BIN}
 
.PHONY: all clean

拷贝pkey到project目录下,然后赋值上面的Makefile,直接make可生成测试程序。

参考

  1. mbedtls学习系列-aes、rsa、证书
  2. RSA公钥文件(PEM)解析
  3. RSA算法明文长度介绍
  4. RSA密钥长度、明文长度和密文长度
  5. 了解AES加密算法
posted @ 2023-07-23 19:33  yuxi_o  阅读(196)  评论(0编辑  收藏  举报