關於PolarSSL
mbed TLS(以前稱為PolarSSL)是TLS和SSL協議的實現,並且需要相應的加密算法和支持代碼。這是雙重許可與Apache許可證 2.0版(與GPLv2許可也可)。網站上指出,mbed TLS的目標是“易於理解,使用,集成和擴展”
核心SSL 庫用C編程語言編寫,並實現SSL模塊,基本加密功能並提供各種實用功能。與OpenSSL和TLS的其他實現不同,mbed TLS設計為適合小型嵌入式設備,最小完整的TLS堆棧需要60KB的程序空間和64KB的RAM。它也是高度模塊化的:每個組件,如加密函數,可以獨立於框架的其余部分使用。版本也可用於Microsoft Windows和Linux。因為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,先這樣,想到什么在補充