mbedtls學習(1)搭建環境
獲得mbedtls源碼
git clone -b mbedtls-2.7 https://github.com/ARMmbed/mbedtls.git
clone下來時這樣
上面主要4個目錄
- configs 是mbedtls參考的配置文件
- include 是源碼頭文件,mbedtls的默認配置頭文件是config.h就在這里面
- library 是源碼C文件,mbedtls的實現
- programs 是一些示例,可以參考里面的例子看怎么用mbedtls
建立實驗工程編寫makefile
建立實驗工程目錄如下
mbedtls目錄就是clone下來的mbedtls源碼,projects是一個個工程目錄,si是用來保存各個工程source insight的文件。
每個project會使用這個makefile
PRJ_DIR :=$(PWD)
#sdk路徑。。
SDK_DIR :=$(PRJ_DIR)/../..
#components
COMPONENTS_DIR :=$(SDK_DIR)/components
#libs
LIBS_DIR :=$(SDK_DIR)/libs
#可執行文件輸出路徑
OUT_DIR :=$(PRJ_DIR)/out
#工程名字
TARGET ?=$(notdir $(PRJ_DIR))
CROSS_COMPILE ?=
CC := $(CROSS_COMPILE)gcc
$(shell if [ -f $(OUT_DIR) ];then echo "exist" ; else mkdir -p $(OUT_DIR); fi;)
#頭文件路徑
INCDIRS := $(COMPONENTS_DIR)/mbedtls/include
#源文件路徑
SRCDIRS := $(COMPONENTS_DIR)/mbedtls/library \
$(PRJ_DIR)/src
ALL_INCLUDE := $(patsubst %, -I %, $(INCDIRS))
ALL_CFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))
ALL_CFILENDIR := $(notdir $(ALL_CFILES))
ALL_COBJS := $(patsubst %, $(OUT_DIR)/%, $(ALL_CFILENDIR:.c=.o))
ALL_OBJS := $(ALL_COBJS)
VPATH := $(SRCDIRS)
#CFLAGS :=-I$(COMPONENTS_DIR)/mbedtls/configs -DMBEDTLS_CONFIG_FILE='<config-mini-tls1_1.h>'
$(TARGET) : $(ALL_OBJS)
$(CC) -o $(TARGET) $^
$(ALL_OBJS) : $(OUT_DIR)/%.o : %.c
$(CC) -c $(ALL_INCLUDE) $(CFLAGS) -o $@ $<
.PHONY: clean
clean:
rm -rf $(TARGET) $(ALL_OBJS)
base64例子
procect:base64
base64是把非ASCII碼數據轉化成ASCII的編碼方法,經過base64后的數據長度會比原來長1/3且base64有填充算法,使編碼結果總是4字節整數倍。
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include "mbedtls/base64.h"
#include "mbedtls/platform.h"
static uint8_t msg[] =
{
0x14, 0xfb, 0x9c, 0x03, 0xd9, 0x7e
};
void dump_buf(char *info, uint8_t *buf, uint32_t len)
{
mbedtls_printf("%s", info);
for(uint32_t i = 0; i < len; i++) {
mbedtls_printf("%02x ", msg[i]);
}
mbedtls_printf("\n");
}
int main(void)
{
size_t len;
uint8_t rst[512];
len = sizeof(msg);
dump_buf("\n base64 message: ", msg, len);
mbedtls_base64_encode(rst, sizeof(rst), &len, msg, len);
mbedtls_printf(" base64 encode : %s len %d\n", rst,len);
mbedtls_base64_decode(rst, sizeof(rst), &len, rst, len);
dump_buf(" base64 decode : ", rst, len);
printf("\n");
return 0;
}
運行結果:
遍歷mbedtls安全套件
procect:ciphersuite-list
例如TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
**協商算法ECDHE
身份認證算法ECDSA
對稱加密算法AES_256
消息認證算法GCM
偽隨機數算法SHA384
下面代碼可以遍歷mbedtls安全套件
#include <stdio.h>
#include "mbedtls/ssl.h"
#include "mbedtls/platform.h"
int main( void )
{
int index = 1;
const int *list;
const char *name;
mbedtls_printf("\n Available Ciphersuite:\n");
list = mbedtls_ssl_list_ciphersuites();
for(; *list; list++) {
name = mbedtls_ssl_get_ciphersuite_name(*list);
mbedtls_printf(" [%03d] %s\n", index++, name);
}
mbedtls_printf("\n");
return 0;
}
運行結果顯示默認(mbedtls-2.7)的config.h有120種安全套件
。。。省略
而添加宏定義-DMBEDTLS_CONFIG_FILE='<config-mini-tls1_1.h>'
使用config-mini-tls1_1.h則裁剪到5種
參考書《密碼技術與物聯網安全:mbedtls開發實戰》
智能推薦
【ITK學習筆記】1.環境搭建
安裝 VS2015 和 QT-571 安裝 VTK 安裝ITK VTKITK混合測試 安裝 VS2015 和 QT-5.7.1 下載并安裝 VS2015 和 qt-opensource-windows-x86-msvc2015-5.7.1.exe 配置QT環境變量 安裝QT-VS-TOOLS并選擇Qt版本C:\Qt\Qt5.7.1\5.7\msvc2015_64 安裝 VTK 文件目錄如下,VTK...
Django學習(1)開發環境的搭建
Windows下virtualenv與virtualenvwrapper的安裝與使用 這個可以讓我們設置單獨的django的開發環境,讓你環境管理更加的方便。 安裝virtualenvwrapp 設置WORK_HOME環境變量 新建虛擬環境 因為設置了WORKON_HOME環境變量,新建的虛擬環境就會對應的創建在環境變量所對應的位置 一些wrapp的基本命令: 1.進入虛擬環境目錄 2.退出虛擬環...
sqlite學習筆記(1)環境搭建
一、 命令運行平臺 學習一樣新的先要把環境平臺搭建起來,然后自己多實踐才能領悟的更快一點。初學時可以參考《sqlite3權威指南》。 首先去官網下載sqlite-tools-win32-x86-3190300.zip和sqlite-dll-win64-x64-3200100.zip(注意我的是64位的,...
php學習之旅-1:環境搭建
1.IDE 網上搜了下,我注意到評價較高的有2款: - PHPStrom - Sublime Text 3 //嚴格意義上來說是個文本編輯器 其他一些,可以作為了解:NetBeans, PHPStorm, VIM, Zend Studio, Cloud9或Atom。 2.安裝phpStorm 2.1.下載 也沒去官網下載,就在網上隨意下載了一個包,2017年2月份的,200來MB,還行吧。 鏈接地...
libtorch學習筆記(1)- 開發環境搭建
安裝 首先下載libtorch安裝包,我選在了debug版本的用于學習: https://pytorch.org/get-started/locally/ 解壓到某一目錄,比如:I:\pytorch\1.5.1\debug 配置VS2017 創建一個VS2017 console project, 選擇Debug|x64,然后配置include, libpath和link libraries: 比如...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...