資源簡介
一個加密算法的實現,最最重要的關鍵詞是—速度。
舉個例子來說明,速度對加密算法的重要:假設我們實現了兩個加密算法DES1.0和DES2.0,
其中DES1.0的速度為900KB/S,DES2.0的速度為1000KB/S。假設一個文件有10G,我需要對其進行加密,
那么,用DES1.0所耗費的時間為1111s,DES2.0的速度為1000S。DES2.0比DES1.0快了111秒。
現實生活里我們要加密的數據還可能遠遠不止10G。不要小看這111S,要知道,讓CPU盡可能的為用戶服務,
是我們每一個程序員的職責,不論你是用C,C++還是JAVA。因此,為了速度,我們必須舍棄一些東西。
舉個例子來說明,速度對加密算法的重要:假設我們實現了兩個加密算法DES1.0和DES2.0,
其中DES1.0的速度為900KB/S,DES2.0的速度為1000KB/S。假設一個文件有10G,我需要對其進行加密,
那么,用DES1.0所耗費的時間為1111s,DES2.0的速度為1000S。DES2.0比DES1.0快了111秒。
現實生活里我們要加密的數據還可能遠遠不止10G。不要小看這111S,要知道,讓CPU盡可能的為用戶服務,
是我們每一個程序員的職責,不論你是用C,C++還是JAVA。因此,為了速度,我們必須舍棄一些東西。
代碼片段和文件信息
/*
DES(Data?Encrypt?Standard數據庫加密標準)是迄今為止使用最廣泛的加密體制。
?????初學信息安全的新生,一般都會被老師要求實現DES算法,如果老師不要求,那么有緣來我這里共同學習的朋友,
?我建議你用C去實現一下,C語言在信息安全領域很重要,更何況隸屬于工科的信息安全,你只懂理論是遠遠不夠的。
?????想用其他語言實現的朋友,如果你用了匯編,那么請您老人家走開不要來看小弟的笑話。如果你用C++或者JAVA,
?那么我勸您用C吧,因為2年前本人計算過速度,在我的機器上,同樣的代碼,用C++新建的工程要比用C新建的工程慢了2倍。
?至于JAVA,我估計要慢10倍。
?????廢話不多說,DES算法的理論我就不聒噪了,想要了解其實現的人,如果不懂其理論就來看這文章,
?即便是看懂了也會走火入魔,或者是某位學生心懷不軌。
????
?????一個加密算法的實現,最最重要的關鍵詞是—速度。
?????舉個例子來說明,速度對加密算法的重要:假設我們實現了兩個加密算法DES1.0和DES2.0,
?其中DES1.0的速度為900KB/S,DES2.0的速度為1000KB/S。假設一個文件有10G,我需要對其進行加密,
?那么,用DES1.0所耗費的時間為1111s,DES2.0的速度為1000S。DES2.0比DES1.0快了111秒。
?現實生活里我們要加密的數據還可能遠遠不止10G。不要小看這111S,要知道,讓CPU盡可能的為用戶服務,
?是我們每一個程序員的職責,不論你是用C,C++還是JAVA。因此,為了速度,我們必須舍棄一些東西。
?????有的同學喜歡用動態數組,因為這也是個好東西,可以節約空間,
?于是有人認為用了動態數組的程序比不用動態數組的程序要高了好幾級。
?????動態數組貌似高深,但如果你用在加密算法里,我只能說這位同學啊你真是吃力不討好,
?在計算機世界里,往往靜態的東西就是比動態的東西速度要快。
?????在此我首先聲明,如果你不是在練習結構體和malloc/calloc的使用,
?那么請你果斷舍棄這些在加密算法里華而不實的東西。
?????好了,說了這么多,各位看官都等急了吧,下面我就結合DES算法原理來分步驟講解我的代碼。?
*//*
一、準備
????首先,頭文件與宏定義。
C代碼??*/?
#include?“stdio.h“??
#include?“memory.h“??
#include?“time.h“??
#include?“stdlib.h“??
??
#define?PLAIN_FILE_OPEN_ERROR?-1??
#define?KEY_FILE_OPEN_ERROR?-2??
#define?CIPHER_FILE_OPEN_ERROR?-3??
#define?OK?1
/*
其次,對基本數據類型進行typedef。
????這句是不可以少的,請養成良好習慣,不然以后如果你要修改基本數據類型,累死你。???
C代碼???*/
typedef?char?ElemType;
?/*
????而后,是初始置換表,逆初始置換表,S-Box等已知數據。????
C代碼????*/
//初始置換表IP
int?IP_Table[64]?=?{??57494133251791??
??????????????????????595143352719113??
??????????????????????615345372921135??
??????????????????????635547393123157??
??????????????????????56484032241680??
??????????????????????585042342618102??
??????????????????????605244362820124??
??????????????????????625446383022146};???
//逆初始置換表IP^-1??
int?IP_1_Table[64]?=?{?397471555236331??
???????????????????????386461454226230??
???????????????????????375451353216129??
???????????????????????364441252206028??
???????????????????????353431151195927??
???????????????????????342421050185826??
???????????????????????33141949175725??
???????????????????????32040848165624};??
//擴充置換表E??
int?E_Table[48]?=?{3101234
???????????????????345678
???????????????789101112??
???????????????????111213141516??
???????????????????151617181920??
???????????????????192021222324??
???????????????????232425262728??
???????????????????27282930310};??
//置換函數P??
int?P_Table[32]?=?{156192028112716??
???????????????????0142225417309??
??????????????????172313312628??
??????????????????18122952110324};??
//S盒??
int?S[8][4][16]?=//S1??
??????????????????{{{1441312151183106125907}??
??????????????????{0157414213110612119538}??
??????????????????{4114813621115129731050}??
??{1512824917511314100613}}??
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????180292??2011-06-22?17:18??DES-C代碼\Debug\dess.exe
?????文件?????205432??2011-06-22?17:18??DES-C代碼\Debug\dess.ilk
?????文件??????23156??2011-06-22?17:18??DES-C代碼\Debug\dess.obj
?????文件?????188660??2011-06-22?17:18??DES-C代碼\Debug\dess.pch
?????文件?????402432??2011-06-22?17:18??DES-C代碼\Debug\dess.pdb
?????文件??????33792??2011-06-23?17:22??DES-C代碼\Debug\vc60.idb
?????文件??????45056??2011-06-22?17:18??DES-C代碼\Debug\vc60.pdb
?????文件??????19642??2011-06-24?15:01??DES-C代碼\dess.c
?????文件???????3371??2011-06-22?17:18??DES-C代碼\dess.dsp
?????文件????????533??2011-06-22?17:18??DES-C代碼\dess.dsw
?????文件??????41984??2011-06-23?17:22??DES-C代碼\dess.ncb
?????文件??????48640??2011-06-23?17:22??DES-C代碼\dess.opt
?????文件????????242??2011-06-23?14:58??DES-C代碼\dess.plg
?????目錄??????????0??2012-04-08?19:42??DES-C代碼\Debug
?????目錄??????????0??2012-04-08?19:42??DES-C代碼
-----------?---------??----------?-----??----
??????????????1193232????????????????????15
- 上一篇:LINUX下命令行界面的C語言細胞游戲
- 下一篇:C語言實現的一個內存泄漏檢測程序
評論
共有 條評論