999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于AES加密的Windows Socket網(wǎng)絡(luò)通信實現(xiàn)

2014-03-19 05:43:58閆庚哲
微處理機 2014年3期
關(guān)鍵詞:網(wǎng)絡(luò)通信

閆庚哲

(哈爾濱理工大學(xué)軟件學(xué)院,哈爾濱150036)

·微機網(wǎng)絡(luò)與通信·

基于AES加密的Windows Socket網(wǎng)絡(luò)通信實現(xiàn)

閆庚哲

(哈爾濱理工大學(xué)軟件學(xué)院,哈爾濱150036)

隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)安全逐漸成為一個潛在的巨大問題。為了保障用戶的自身權(quán)益,提高用戶通信內(nèi)容的安全性就顯得尤為重要。因此,在網(wǎng)絡(luò)通信的傳輸中采用AES高級加密方法,可以有效提高信息傳輸?shù)陌踩浴R訵indows Socket網(wǎng)絡(luò)通信方式為例,介紹了應(yīng)用AES加密算法的實現(xiàn),并給出了C++語言代碼。

高級加密標(biāo)準(zhǔn);網(wǎng)絡(luò)安全;加密;網(wǎng)絡(luò)通信;套接字

1 引 言

1.1 AES原理

1.1.1 AES簡介

密碼學(xué)中的高級加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES),又稱Rijndael加密法。這個標(biāo)準(zhǔn)用來替代原先的DES[1],已經(jīng)被多方分析且廣為全世界所使用。AES[2-5]算法是美國標(biāo)準(zhǔn)技術(shù)研究所(NIST)于2001年11月正式發(fā)布的,它是一種分組加密算法,處理的最小單元是一個分組,即把明文或密文分成固定長度的分組,進而進行加密或解密處理。AES的分組大小為128比特,可以支持的密鑰長度有128、192、256三種,分別稱為AES-128、AES-192、AES-256,其中又以AES-128應(yīng)用最廣[6]。

1.1.2 AES算法

AES算法中較為重要的是多次迭代操作[7],每一次迭代操作包涵字節(jié)替換(subbyte)、行移位(shiftrow)、列混合(mixcolumns)和輪密鑰混合(addroundkey)等四部分。經(jīng)過多次迭代變化從而提高信息的加密強度。解密過程則為加密過程的逆運算。

1.2 Socket網(wǎng)絡(luò)通信原理

1.2.1 Socket簡介

Socket(套接字)是建立在傳輸層協(xié)議(主要是TCP和UDP)上的一種套接字規(guī)范。Socket具有信息收發(fā)速度快、保密性好、占用服務(wù)器吞吐量小、易于編程實現(xiàn)等優(yōu)點[8]。

Socket接口包含Server Socket(服務(wù)器端,它是通信的響應(yīng)方,它監(jiān)聽以及被動接受客戶端的連接請求,并對請求進行回復(fù))和Client Socket(客戶端,它是通信的請求方,主動與服務(wù)器端建立連接)兩個組件。常用的Socket網(wǎng)絡(luò)通信一般采用Client-Server模式,各客戶端都和服務(wù)器端連接。此通信模式結(jié)構(gòu)簡單、編程易實現(xiàn),但各客戶端之間不能直接通信,需通過服務(wù)器端轉(zhuǎn)發(fā)。

1.2.2 Socket通信原理

socket通常也稱作“套接字”[8],用于描述IP地址和端口,是一個通信鏈句柄。應(yīng)用程序通常通過“套接字”向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。服務(wù)器使用ServerSocket監(jiān)聽指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請求,客戶連接后,會話產(chǎn)生;在完成會話后,關(guān)閉連接。客戶端使用ClientSocket對網(wǎng)絡(luò)上某一個服務(wù)器的某一個端口發(fā)出連接請求,一旦連接成功,打開會話;會話完成后,關(guān)閉Socket。客戶端不需要指定打開的端口,通常臨時、動態(tài)的分配一個1024以上的端口。

2 加密傳輸介紹

發(fā)送方:在本地對明文用私人參數(shù)作AES算法加密,調(diào)用Winsock的發(fā)送處理函數(shù)Send()將加密后的內(nèi)容發(fā)送到網(wǎng)絡(luò)中。

接收方:調(diào)用Winsock的接收處理函數(shù)Recv()獲取網(wǎng)絡(luò)中的密文信息,在本地對密文用私人參數(shù)作AES算法解密。

實現(xiàn)客戶服務(wù)器之間用socket進行通信,并且明文查看,密文傳輸?shù)墓δ堋?/p>

3 加密傳輸?shù)腃++實現(xiàn)代碼

3.1 AES算法的C++實現(xiàn)代碼

加密過程和解密過程都是一個周期迭代的過程,以AES-128為例,迭代次數(shù)為10次。數(shù)據(jù)首先和128比特的原始密鑰經(jīng)過addroundkey運算后再進行10輪運算。10輪運算由字節(jié)替換(subbyte)、行移位(shiftrow)、列混合(mixcolumns)和輪密鑰混合(addroundkey)組成,其中算法定義最后一輪運算不進行列混合操作。

3.1.1 加密的基本C++實現(xiàn)代碼

3.1.1.1 字節(jié)替換

字節(jié)替換運算是一個可逆的非線性字節(jié)代換操作,該運算處理的最小單位是一個字節(jié),也就是4×4字節(jié)矩陣中的一個元素。對字節(jié)的替換操作可以基于一個代換表(又稱S盒)。字節(jié)替換表由兩個獨立變換組成:有限域GF(28)中字節(jié)的乘法逆運算和有限域GF(2)中的仿射變換[9]。

void AES::SubBytes(unsigned char state[][4]){

for(r=0;r<4;r++)for(c=0;c<4;c++)state[r][c]=Sbox[state[r][c]];}

3.1.1.2 行移位

加密中的行移位將每一行進行循環(huán)左移位,即最高位字節(jié)移動到最低位字節(jié)。具體移位的數(shù)目與行的序號有關(guān),第零行不進行移位,第一行循環(huán)左移一個字節(jié),第二行循環(huán)左移兩個字節(jié),第三行循環(huán)左移三個字節(jié)…。

void AES::ShiftRows(unsigned char state[][4]){

for(r=1;r<4;r++){

for(c=0;c<4;c++)t[c]=state[r][(c+r)%4];

for(c=0;c<4;c++)state[r][c]=t[c];}}

3.1.1.3 列混合

列混合主要以每一列為單位并進行處理,每一列看作一個GF(28)[9]下的4位多項式。利用該多項式和c(x)={03}x^3+{01}x^2+{01}x+{02}進行多項式乘法,乘法結(jié)果再進行取模運算,模的值為(X^4+1)。

void AES::MixColumns(unsigned char state[][4]){

for(c=0;c<4;c++){

for(r=0;r<4;r++)t[r]=state[r][c];

for(r=0;r<4;r++)state[r][c]=FFmul(0x02,t[r])^FFmul(0x03,t[(r+1)%4])^FFmul(0x01,t[(r+2)%4])^FFmul(0x01,t[(r+3)% 4]);}}

unsigned char AES::FFmul(unsigned char a,unsigned char b){

bw[0]=b;

for(i=1;i<4;i++){

bw[i]=bw[i-1]<<1;

if(bw[i-1]&0x80)bw[i]^=0x1b;}

for(i=0;i<4;i++)if((a>>i)&0x01)res^=bw[i];

return res;}

3.1.1.4 輪密鑰混合

簡單來說就是逐字節(jié)相加,有限域GF(28)上的加法是模2加法,即異或

void AES::AddRoundKey(unsigned char state[][4],unsigned char k[][4]){

for(c=0;c<4;c++)for(r=0;r<4;r++)state[r][c]^=k[r][c];}

3.1.1.5 密鑰擴展

將輸入的密鑰擴展為11組128位密鑰組,其中第0組為輸入密鑰本身,其后第n組第i列為第n-1組第i列與第n組第i-1列之和(模2加法,1<=i<=3)

void AES::KeyExpansion(unsigned char*key,unsigned char w[][4][4]){

unsigned char rc[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x1b,0x36};

for(r=0;r<4;r++)for(c=0;c<4;c++)w[0][r][c]=key[r+c*4];

for(i=1;i<=10;i++)for(j=0;j<4;j++){

unsigned char t[4];

for(r=0;r<4;r++)t[r]=j(luò)?w[i][r][j-1]:w[i-1][r][3];

if(j==0){

unsigned char temp=t[0];

for(r=0;r<3;r++)t[r]=Sbox[t[(r+1)% 4]];

t[3]=Sbox[temp];

t[0]^=rc[i-1];}

for(r=0;r<4;r++)w[i][r][j]=w[i-1][r][j]^t[r];}}

3.1.2 解密的基本C++實現(xiàn)代碼

解密算法,基本運算中除了AddRoundKey(輪密鑰加)不變外,其余的都需要進行逆變換。即Inv-SubBytes(逆字節(jié)替代)、InvShiftRows(逆行移位)、InvMixColumns(逆列混淆)。

void AES::InvSubBytes(unsigned char state[][4]){

for(r=0;r<4;r++)for(c=0;c<4;c++)state[r][c]=InvSbox[state[r][c]];}

void AES::InvShiftRows(unsigned char state[][4]){;

for(r=1;r<4;r++){

for(c=0;c<4;c++)t[c]=state[r][(c-r+4)%4];

for(c=0;c<4;c++)state[r][c]=t[c];}}

void AES::InvMixColumns(unsigned char state[][4]){

for(c=0;c<4;c++){

for(r=0;r<4;r++)t[r]=state[r][c];

for(r=0;r<4;r++)state[r][c]=FFmul(0x0e,t[r])^FFmul(0x0b,t[(r+1)%4])^FFmul(0x0d,t[(r+2)%4])^FFmul(0x09,t[(r+3)% 4]);}}

3.1.3 加密過程的C++實現(xiàn)代碼

先將輸入的明文按列序組合成4×4矩陣,直接與第0組密鑰(即輸入的密鑰)相加(異或),作為輪加密的輸入。然后循環(huán)10次進行SubBytes、ShiftRows、MixColumns、AddRoundKey運算,最后恢復(fù)原序列。需要注意的是最后一輪并不進行Mix-Columns(列混淆變換)。

unsigned char*AES::Cipher(unsigned char* input){

for(r=0;r<4;r++)for(c=0;c<4;c++)state[r][c]=input[c*4+r];

AddRoundKey(state,w[0]);

for(i=1;i<=10;i++){

SubBytes(state);

ShiftRows(state);

if(i!=10)MixColumns(state);

AddRoundKey(state,w[i]);}

for(r=0;r<4;r++)for(c=0;c<4;c++)input[c*4+r]=state[r][c];

return input;}

3.1.4 解密過程的C++實現(xiàn)代碼

unsigned char*AES::InvCipher(unsigned char *input){

for(r=0;r<4;r++)for(c=0;c<4;c++)state[r][c]=input[c*4+r];

AddRoundKey(state,w[10]);

for(i=9;i>=0;i--){

InvShiftRows(state);

InvSubBytes(state);

AddRoundKey(state,w[i]);

if(i)InvMixColumns(state);}

for(r=0;r<4;r++)for(c=0;c<4;c++)input[c*4+r]=state[r][c];

return input;}

3.2 Socket通信的C++實現(xiàn)代碼

3.2.1 客戶端加密發(fā)送的C++實現(xiàn)代碼

void__fastcall TForm1::btnclientSendClick(TObject*Sender){

AES aes;//讀入密鑰文件

FileRead(keyFile,(char*)key,16);//讀入明文并加密

while(FileRead(plainFile,(char*)plainText,16))

cipherText=aes.Cipher(plainText,key,16);//發(fā)送密文

AnsiString cipher;

cipher=AnsiString((char*)cipherText);

ClientSocket->Socket->SendText(cipher);}

3.2.2 服務(wù)器解密接收的C++實現(xiàn)代碼

void__fastcall TForm1::btnDecryptClick(TObject*Sender){

AES aes;//讀入解密密鑰

FileRead(keyFile,(char*)key,16);//讀入解密密文

while(FileRead(cipherFile,(char*)cipher-Text,16))

plainText=aes.InvCipher(cipherText,key,16);//接收密文

AnsiStringmemoPlain;

memoPlain=(AnsiString)((char*)plain-Text);

Memo1->Lines->Add(memoPlain);}

4 結(jié)束語

隨著互聯(lián)網(wǎng)技術(shù)的高速發(fā)展,尤其是互聯(lián)網(wǎng)的應(yīng)用變得越來越廣泛,在帶來海量信息的同時,網(wǎng)絡(luò)的開放性和自由性也產(chǎn)生了私有信息被泄露的可能性,網(wǎng)絡(luò)信息的安全性變得日益重要起來。對于目前存在的網(wǎng)絡(luò)安全問題,為了提高信息傳輸?shù)陌踩裕撐囊訵indows Socket網(wǎng)絡(luò)通信方式為例,采用AES的高級加密方法進行加密傳輸,可以有效避免信息在傳輸過程中被別人竊用。

[1]張潔,朱麗娟.DES加密算法分析與實現(xiàn)[J].軟件導(dǎo)刊,2007(3):95-97.

[2]Daemen J,Rijmen V.The Design of Rijndael:AES-the Advanced Encryption Standard[M].Berlin:Springer-Verlag,2012.

[3]Kuleuven.A Polynomial Description:The Original Description of Rijndael[EB/OL].ESAT:Kuleuven,2010.http://www.esat.kuleuven.ac.be/rijmen/rijndael/1.net.

[4]何明星,范平志.新一代私鑰加密標(biāo)準(zhǔn)AES進展與評述[J].計算機應(yīng)用研究,2001,18(10):4-6.

[5]吳小博.AES加密算法分析與C++編程實現(xiàn)[J]計算機安全,2007(12):44-46.

[6]單玉峰,潘孟賢.一種新的加密標(biāo)準(zhǔn)AES[J].信息技術(shù),2002(11):32-33.

[7]何明星,范平志.新一代私鑰加密標(biāo)準(zhǔn)AES進展與評述[J].計算機應(yīng)用研究,2001(10):4.

[8]王茂林,賀富強.Socket在局域網(wǎng)通信中的應(yīng)用[J].艦船電子工程,2006,26(5):93-95.

[9]NIST.Announcing the ADVANCED ENCRYPTION STANDARD(AES)[M].America:Springer-Verlag,2001.

Implement of AES-based Encryption Windows Socket Network Communication

YAN Geng-zhe
(College of Software,Harbin University of Technology,Harbin 150036,China)

With the rapid development of internet technology,network security has become a potentially huge problem.In order to protect the rights and interests of user's own,security of user communication content should be focused on particularly.Therefore,AESAdvanced Encryption method is used in the network communication to effectively improve the security of information transmission.Windows socket network communication is given an example,the application of the AES encryption algorithm is described and the C++language code is shown in this paper.

AES;Network security;Encryption;Network communication;Socket

10.3969/j.issn.1002-2279.2014.03.005

TP393

:B

:1002-2279(2014)03-0014-04

閆庚哲(1993-),男,黑龍江哈爾濱人,本科,主研方向:軟件工程。

2013-11-21

猜你喜歡
網(wǎng)絡(luò)通信
基于NoC架構(gòu)的網(wǎng)絡(luò)通信抗干擾方法研究
海上軍用網(wǎng)絡(luò)通信的安全控制技術(shù)
基于網(wǎng)絡(luò)通信的智能照明系統(tǒng)設(shè)計
電子制作(2019年15期)2019-08-27 01:11:48
基于CAN總線的網(wǎng)絡(luò)通信信道的建模與研究
移動計算機網(wǎng)絡(luò)通信技術(shù)研究
電子測試(2018年14期)2018-09-26 06:05:06
計算機網(wǎng)絡(luò)通信常見問題與技術(shù)發(fā)展研究
電子制作(2018年10期)2018-08-04 03:24:46
網(wǎng)絡(luò)通信中信息隱藏技術(shù)的應(yīng)用
基于網(wǎng)絡(luò)通信的校園智能音箱設(shè)計
電子制作(2018年1期)2018-04-04 01:48:30
談計算機網(wǎng)絡(luò)通信常見問題及技術(shù)發(fā)展
電子制作(2017年17期)2017-12-18 06:41:06
汽車檢測控制系統(tǒng)網(wǎng)絡(luò)通信技術(shù)分析
電子測試(2017年23期)2017-04-04 05:07:12
主站蜘蛛池模板: 国产免费福利网站| 九九热视频在线免费观看| 国产成人精品在线1区| 在线亚洲天堂| 国产精品亚洲专区一区| 日韩在线播放中文字幕| 女同久久精品国产99国| 日韩毛片在线播放| 青草视频久久| 亚洲成aⅴ人片在线影院八| 天天婬欲婬香婬色婬视频播放| 久久婷婷综合色一区二区| 国产在线观看99| 午夜视频日本| 国产Av无码精品色午夜| 国产成人免费高清AⅤ| 国产91熟女高潮一区二区| 欧美成人精品一级在线观看| 青青网在线国产| 国产簧片免费在线播放| 日韩国产一区二区三区无码| 免费不卡在线观看av| 日韩无码视频专区| 精品国产91爱| 一级毛片免费的| 亚洲国产综合第一精品小说| 六月婷婷精品视频在线观看 | 91高清在线视频| 第一页亚洲| 毛片卡一卡二| 国产情侣一区二区三区| 日韩AV手机在线观看蜜芽| 久久婷婷国产综合尤物精品| 国产成人做受免费视频| 久久综合五月| 午夜影院a级片| www.亚洲色图.com| 国产精品第一区在线观看| 播五月综合| 久久国产av麻豆| 麻豆国产精品一二三在线观看| 香蕉99国内自产自拍视频| 日韩麻豆小视频| 国产成人久久综合一区| 亚洲视频影院| 免费欧美一级| a毛片基地免费大全| 亚洲日韩国产精品综合在线观看| 日韩精品久久久久久久电影蜜臀| 国产精品七七在线播放| 综合色区亚洲熟妇在线| 色悠久久综合| 欧美日韩国产精品综合 | 黄网站欧美内射| 特级做a爰片毛片免费69| 日本高清在线看免费观看| 国产成人久久777777| 综合五月天网| 国内黄色精品| 91九色最新地址| 国产成人综合亚洲欧洲色就色| 国产成a人片在线播放| 国产精品视频第一专区| 尤物国产在线| 国产综合亚洲欧洲区精品无码| 国产精品美女在线| 成年人午夜免费视频| 456亚洲人成高清在线| 九九视频免费在线观看| 国产成+人+综合+亚洲欧美| 亚洲成人动漫在线观看| 色哟哟国产精品一区二区| 国产成人精品高清不卡在线| 久久精品电影| 精品成人免费自拍视频| 欧美在线综合视频| 国产乱子伦一区二区=| 久久综合九九亚洲一区| 播五月综合| 亚洲视频在线青青| 91国内视频在线观看| 2019国产在线|