



版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、AES加密算法源代碼(c語(yǔ)版)/AES.h#define decrypt TRUE#define encrypt FALSE#define TYPE BOOLtypedef struct _AESint Nb;int Nr;int Nk;unsigned long *Word;unsigned long *State;AES;/*加密數(shù)據(jù),這個(gè)函數(shù)和下的InvCipher于演的,只作了次加密或解密。要進(jìn)數(shù)據(jù)量加解密只需對(duì)這兩個(gè)函數(shù)稍作修改就可以了。byte *input 明byte *inSize 明長(zhǎng)byte *out 密存放的地byte *key 密鑰keybyte *keySize 密鑰
2、長(zhǎng)*/void Cipher(unsigned char* input,int inSize,unsigned char* out,unsigned char* key,int keySize);/*解密數(shù)據(jù)byte *input 密int *inSize 密長(zhǎng)byte *out 明存放的地byte *key 密鑰keyint *keySize 密鑰長(zhǎng)*/void InvCipher(unsigned char* input,int inSize,unsigned char* out,unsigned char* key,int keySize);/*成加密的參數(shù)AES結(jié)構(gòu)int inSize
3、 塊byte* 密鑰int 密鑰長(zhǎng)unsigned long 屬性(標(biāo)實(shí)類(lèi)型)返回AES結(jié)構(gòu)指針*/AES *InitAES(AES *aes,int inSize,unsigned char* key,int keySize, TYPE type);/*成加密的參數(shù)AES結(jié)構(gòu)int inSize 塊byte* 密鑰byte* 密鑰int 密鑰長(zhǎng)返回AES結(jié)構(gòu)指針*/AES *InitAES(int inSize,unsigned char* key,int keySize, BOOL );/*加密時(shí)進(jìn)Nr輪運(yùn)算AES * aes 運(yùn)時(shí)參數(shù)*/void CipherLoop(AES *aes)
4、;/*解密時(shí)進(jìn)Nr輪逆運(yùn)算AES * aes 運(yùn)時(shí)參數(shù)*/void InvCipherLoop(AES *aes);/*釋放AES結(jié)構(gòu)和State和密鑰庫(kù)word*/void freeAES(AES *aes);/AES.cpp#include "stdafx.h"#include <windows.h>#include <stdio.h>#include "AES.h"unsigned char* SubWord(unsigned char* word);unsigned long* keyExpansion(unsigned
5、char* key, int Nk, int Nr,int);/*加密數(shù)據(jù)byte *input 明byte *inSize 明長(zhǎng)byte *out 密存放的地byte *key 密鑰keybyte *keySize 密鑰長(zhǎng)*/void Cipher(unsigned char* input, int inSize, unsigned char* out, unsigned char* key, int keySize)AES aes ;InitAES(&aes,inSize,key,keySize,encrypt);/while(.)memcpy(aes.State,input,in
6、Size);CipherLoop(&aes);memcpy(out,aes.State,inSize);/*解密數(shù)據(jù)byte *input 密int *inSize 密長(zhǎng)byte *out 明存放的地byte *key 密鑰keyint *keySize 密鑰長(zhǎng)*/void InvCipher(unsigned char* input, int inSize, unsigned char* out, unsigned char* key, int keySize)void InvCipher(unsigned char* input, int inSize, unsigned char
7、* out, unsigned char* key, int keySize)AES aes;InitAES(&aes,inSize,key,keySize,decrypt);memcpy(aes.State,input,inSize);InvCipherLoop(&aes);memcpy(aes.State,out,inSize);/*成加密的參數(shù)AES結(jié)構(gòu)int inSize 塊byte* 密鑰int 密鑰長(zhǎng)返回AES結(jié)構(gòu)指針*/AES *InitAES(AES *aes,int inSize, unsigned char *key, int keySize, TYPE t
8、ype)int Nb = inSize >>2,Nk = keySize >>2,Nr = Nb < Nk ? Nk:Nb+6;aes->Nb = Nb;aes->Nk = Nk;aes->Nr = Nr;aes->Word = keyExpansion(key,Nb,Nr,Nk);aes->State = new unsigned longNb+3;if(type)aes->State += 3;return aes;/*成加密的參數(shù)AES結(jié)構(gòu)int inSize 塊byte* 密鑰int 密鑰長(zhǎng)返回AES結(jié)構(gòu)指針*/AES
9、*InitAES(int inSize, unsigned char* key, int keySize,unsigned long type)return InitAES(new AES(),inSize,key,keySize,type);/*/void CipherLoop(AES *aes)unsigned char temp4;unsigned long *word8 = aes->Word,*State = aes->State;int Nb = aes->Nb,Nr = aes->Nr;int r;for (r = 0; r < Nb; +r)Sta
10、ter = word8r;for (int round =1; round <Nr; +round)word8 += Nb;/*假設(shè)Nb=4;-| s0 | s1 | s2 | s3 | s0 | s1 | s2 | s3 |-| s4 | s5 | s6 | s7 |-| s8 | s9 | sa | sb |-| sc | sd | se | sf |-| | | | |-| | | | |-| | | | |-*/memcpy(State+Nb,State,12);/*Nb=4;-| s0 | | | |-| s4 | s5 | | |-| s8 | s9 | sa | |-| s
11、c | sd | se | sf |-| | s1 | s2 | s3 |-| | | s6 | s7 |-| | | | sb |-*/for(r =0; r<Nb; r+)/*temp = Sboxs0,Sboxs5,Sboxsa,Sboxsf;*/temp0 = Sbox*(unsigned char*)State);temp1 = Sbox*(unsigned char*)(State+1)+1);temp2 = Sbox*(unsigned char*)(State+2)+2);temp3 = Sbox*(unsigned char*)(State+3)+3);*(unsign
12、ed char*)State) = Log_02temp0 Log_03temp1 temp2 temp3;*(unsigned char*)State+1) = Log_02temp1 Log_03temp2 temp3 temp0;*(unsigned char*)State+2) = Log_02temp2 Log_03temp3 temp0 temp1;*(unsigned char*)State+3) = Log_02temp3 Log_03temp0 temp1 temp2;*State = word8r;State+;State -= Nb;memcpy(State+Nb,Sta
13、te,12);word8 += Nb;for(r =0; r<Nb; r+)*(unsigned char*)State) = Sbox*(unsigned char*)State;*(unsigned char*)State+1) = Sbox*(unsigned char*)(State+1)+1);*(unsigned char*)State+2) = Sbox*(unsigned char*)(State+2)+2);*(unsigned char*)State+3) = Sbox*(unsigned char*)(State+3)+3);*State = word8r;*Sta
14、te = word8r;State+;/*解密時(shí)進(jìn)Nr輪逆運(yùn)算AES * aes 運(yùn)時(shí)參數(shù)*/void InvCipherLoop(AES *aes)unsigned long *Word = aes->Word,*State = aes->State;int Nb = aes->Nb,Nr = aes->Nr;unsigned char temp4;int r =0;Word += Nb*Nr;for (r = 0; r < Nb; +r)Stater = Wordr;State -= 3;for (int round = Nr-1; round > 0;
15、 -round)/*假設(shè)Nb=4;-| | | | |-| | | | |-| | | | |-| s0 | s1 | s2 | s3 |-| s4 | s5 | s6 | s7 |-| s8 | s9 | sa | sb |-| sc | sd | se | sf |-*/memcpy(State,State+Nb,12);/*Nb=4;-| | | | s7 |-| | | sa | sb |-| | sd | se | sf |-| s0 | s1 | s2 | s3 |-| s4 | s5 | s6 | |-| s8 | s9 | | |-| sc | | | |-*/*/Word -
16、= Nb;State += Nb+2;for(r = Nb-1; r >= 0; r-)/*temp = iSboxs0,iSboxsd,iSboxsa,iSboxs7;*/temp0 = iSbox*(byte*)State;temp1 = iSbox*(byte*)(State-1)+1);temp2 = iSbox*(byte*)(State-2)+2);temp3 = iSbox*(byte*)(State-3)+3);*(unsigned long*)temp = Wordr;*(unsigned char*)State = Log_0etemp0 Log_0btemp1 Lo
17、g_0dtemp2 Log_09temp3;*(unsigned char*)State+1) = Log_0etemp1 Log_0btemp2 Log_0dtemp3 Log_09temp0;*(unsigned char*)State+2) = Log_0etemp2 Log_0btemp3 Log_0dtemp0 Log_09temp1;*(unsigned char*)State+3) = Log_0etemp3 Log_0btemp0 Log_0dtemp1 Log_09temp2;State -;State -= 2;Word -= Nb;memcpy(State,State+N
18、b,12);State += Nb+2;for(r = Nb-1; r >= 0; r-)*(unsigned char*)State = iSbox*(unsigned char*)State;*(unsigned char*)State+1) = iSbox*(unsigned char*)(State-1)+1);*(unsigned char*)State+2) = iSbox*(unsigned char*)(State-2)+2);*(unsigned char*)State+3) = iSbox*(unsigned char*)(State-3)+3);*State = W
19、ordr;State -;/*-*|k0|k1|k2|k3|k4|k5|k6|k7|k8|k9|.|Nk*4|*-*Nr輪密鑰庫(kù)*每個(gè)密鑰列長(zhǎng)度為Nb*-*| k0 | k1 | k2 | k3 |*-*| k4 | k5 | k6 | k7 |*-*| k8 | k9 | ka | kb |*-*| kc | kd | ke | kf |*-*/unsigned long* keyExpansion(byte* key, int Nb, int Nr, int Nk)unsigned long *w =new unsigned longNb * (Nr+1); / 4 columns of bytes corresponds to a wordmemcpy(w,key,Nk<<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 用電安全懲罰管理辦法
- 福州餐飲住宿管理辦法
- 工程企業(yè)合同管理辦法
- 育肥豬養(yǎng)殖技術(shù)課件
- 肯德基公司介紹
- 肩周炎健康知識(shí)課件
- 醫(yī)院醫(yī)廢培訓(xùn)課件
- 高三第一章數(shù)學(xué)試卷
- 設(shè)備計(jì)劃管理培訓(xùn)課件
- 房山八上期末數(shù)學(xué)試卷
- 熱工測(cè)量及儀表基礎(chǔ)知識(shí)
- 2024年河南洛陽(yáng)文旅集團(tuán)財(cái)務(wù)崗位招聘筆試真題
- 2025年手繪行業(yè)深度研究報(bào)告
- (高清版)DB12∕T 804-2018 口腔綜合治療臺(tái)用水微生物標(biāo)準(zhǔn)
- GB/T 20424-2025重有色金屬精礦產(chǎn)品中有害元素的限量規(guī)范
- 2025年云網(wǎng)能源(曲靖)有限責(zé)任公司招聘筆試參考題庫(kù)含答案解析
- 2022年一級(jí)造價(jià)工程師考試《建設(shè)工程技術(shù)與計(jì)量(土木建筑工程)》真題及解析
- 吊裝施工安全協(xié)議書(shū)范本
- 2015海灣消防JB-QB-GST200 火災(zāi)報(bào)警控制器(聯(lián)動(dòng)型)安裝使用說(shuō)明書(shū)
- 中國(guó)各省區(qū)地圖、基本資料
- 2025年上半年中國(guó)長(zhǎng)江三峽集團(tuán)限公司“脫貧家庭畢業(yè)生”招聘(173人)易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
評(píng)論
0/150
提交評(píng)論