使用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,先這樣,想到什么在補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM