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

基于AES加密的Windows Socket網絡通信實現

2014-03-19 05:43:58閆庚哲
微處理機 2014年3期
關鍵詞:網絡通信

閆庚哲

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

·微機網絡與通信·

基于AES加密的Windows Socket網絡通信實現

閆庚哲

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

隨著互聯網技術的飛速發展,網絡安全逐漸成為一個潛在的巨大問題。為了保障用戶的自身權益,提高用戶通信內容的安全性就顯得尤為重要。因此,在網絡通信的傳輸中采用AES高級加密方法,可以有效提高信息傳輸的安全性。以Windows Socket網絡通信方式為例,介紹了應用AES加密算法的實現,并給出了C++語言代碼。

高級加密標準;網絡安全;加密;網絡通信;套接字

1 引 言

1.1 AES原理

1.1.1 AES簡介

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

1.1.2 AES算法

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

1.2 Socket網絡通信原理

1.2.1 Socket簡介

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

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

1.2.2 Socket通信原理

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

2 加密傳輸介紹

發送方:在本地對明文用私人參數作AES算法加密,調用Winsock的發送處理函數Send()將加密后的內容發送到網絡中。

接收方:調用Winsock的接收處理函數Recv()獲取網絡中的密文信息,在本地對密文用私人參數作AES算法解密。

實現客戶服務器之間用socket進行通信,并且明文查看,密文傳輸的功能。

3 加密傳輸的C++實現代碼

3.1 AES算法的C++實現代碼

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

3.1.1 加密的基本C++實現代碼

3.1.1.1 字節替換

字節替換運算是一個可逆的非線性字節代換操作,該運算處理的最小單位是一個字節,也就是4×4字節矩陣中的一個元素。對字節的替換操作可以基于一個代換表(又稱S盒)。字節替換表由兩個獨立變換組成:有限域GF(28)中字節的乘法逆運算和有限域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 行移位

加密中的行移位將每一行進行循環左移位,即最高位字節移動到最低位字節。具體移位的數目與行的序號有關,第零行不進行移位,第一行循環左移一個字節,第二行循環左移兩個字節,第三行循環左移三個字節…。

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}進行多項式乘法,乘法結果再進行取模運算,模的值為(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 輪密鑰混合

簡單來說就是逐字節相加,有限域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?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++實現代碼

解密算法,基本運算中除了AddRoundKey(輪密鑰加)不變外,其余的都需要進行逆變換。即Inv-SubBytes(逆字節替代)、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++實現代碼

先將輸入的明文按列序組合成4×4矩陣,直接與第0組密鑰(即輸入的密鑰)相加(異或),作為輪加密的輸入。然后循環10次進行SubBytes、ShiftRows、MixColumns、AddRoundKey運算,最后恢復原序列。需要注意的是最后一輪并不進行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++實現代碼

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++實現代碼

3.2.1 客戶端加密發送的C++實現代碼

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);//發送密文

AnsiString cipher;

cipher=AnsiString((char*)cipherText);

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

3.2.2 服務器解密接收的C++實現代碼

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 結束語

隨著互聯網技術的高速發展,尤其是互聯網的應用變得越來越廣泛,在帶來海量信息的同時,網絡的開放性和自由性也產生了私有信息被泄露的可能性,網絡信息的安全性變得日益重要起來。對于目前存在的網絡安全問題,為了提高信息傳輸的安全性,該文以Windows Socket網絡通信方式為例,采用AES的高級加密方法進行加密傳輸,可以有效避免信息在傳輸過程中被別人竊用。

[1]張潔,朱麗娟.DES加密算法分析與實現[J].軟件導刊,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]何明星,范平志.新一代私鑰加密標準AES進展與評述[J].計算機應用研究,2001,18(10):4-6.

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

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

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

[8]王茂林,賀富強.Socket在局域網通信中的應用[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

猜你喜歡
網絡通信
基于NoC架構的網絡通信抗干擾方法研究
海上軍用網絡通信的安全控制技術
基于網絡通信的智能照明系統設計
電子制作(2019年15期)2019-08-27 01:11:48
基于CAN總線的網絡通信信道的建模與研究
測控技術(2018年7期)2018-12-09 08:57:54
移動計算機網絡通信技術研究
電子測試(2018年14期)2018-09-26 06:05:06
計算機網絡通信常見問題與技術發展研究
電子制作(2018年10期)2018-08-04 03:24:46
網絡通信中信息隱藏技術的應用
基于網絡通信的校園智能音箱設計
電子制作(2018年1期)2018-04-04 01:48:30
談計算機網絡通信常見問題及技術發展
電子制作(2017年17期)2017-12-18 06:41:06
汽車檢測控制系統網絡通信技術分析
電子測試(2017年23期)2017-04-04 05:07:12
主站蜘蛛池模板: 国产精品所毛片视频| 欧美成人精品欧美一级乱黄| 理论片一区| 97视频在线精品国自产拍| 99re这里只有国产中文精品国产精品| 97综合久久| 福利姬国产精品一区在线| 亚洲综合激情另类专区| 中文无码伦av中文字幕| 丝袜高跟美脚国产1区| 免费99精品国产自在现线| 欧日韩在线不卡视频| 99久久国产综合精品2023 | 不卡无码h在线观看| 日本精品视频一区二区| 性色一区| 亚洲午夜天堂| 日韩亚洲综合在线| 国产不卡网| 亚洲中文字幕日产无码2021| 在线高清亚洲精品二区| 亚洲国产欧美国产综合久久| 国产精品成人一区二区| 国产一级毛片网站| 啪啪永久免费av| 91九色国产porny| 国产精品99一区不卡| 亚洲色图欧美在线| 欧美a网站| 最新国产精品第1页| 国产欧美日韩资源在线观看| 欧美日韩激情在线| 九色综合伊人久久富二代| 又爽又黄又无遮挡网站| 午夜无码一区二区三区| 国产福利大秀91| 天天干天天色综合网| 国产剧情一区二区| 国产无码网站在线观看| 国产高清在线丝袜精品一区| 精品91自产拍在线| 亚洲精品天堂自在久久77| 久久亚洲美女精品国产精品| 日韩无码黄色| 丁香婷婷激情网| 国产乱子伦精品视频| 精品一区二区三区中文字幕| 欧美一区二区三区国产精品| 99热国产这里只有精品无卡顿"| а∨天堂一区中文字幕| 1024国产在线| 国产99免费视频| 日韩成人在线网站| 中文字幕有乳无码| 六月婷婷激情综合| 国产在线自揄拍揄视频网站| 污网站在线观看视频| 日韩东京热无码人妻| 日韩成人高清无码| 亚洲Av激情网五月天| 日本午夜影院| 99久久国产自偷自偷免费一区| av免费在线观看美女叉开腿| 国产区91| 香蕉精品在线| 欧美中日韩在线| 国产精品视频猛进猛出| 久久香蕉国产线看观看精品蕉| 无码高潮喷水专区久久| 亚洲天堂日韩在线| 国产一区免费在线观看| 操美女免费网站| 亚洲va视频| 97视频精品全国在线观看| 亚洲无线一二三四区男男| 日本高清成本人视频一区| 国产在线视频二区| 亚洲欧美成人影院| 久久国语对白| 日韩欧美中文字幕在线韩免费 | 国产精品午夜福利麻豆| YW尤物AV无码国产在线观看|