• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 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開發實戰》

    版權聲明:本文為weixin_41572450原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_41572450/article/details/103102663

    智能推薦

    【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: 比如...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡