亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        閆庚哲

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

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

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

        閆庚哲

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

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

        高級加密標準;網(wǎng)絡安全;加密;網(wǎng)絡通信;套接字

        1 引 言

        1.1 AES原理

        1.1.1 AES簡介

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

        1.1.2 AES算法

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

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

        1.2.1 Socket簡介

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

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

        1.2.2 Socket通信原理

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

        2 加密傳輸介紹

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

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

        實現(xiàn)客戶服務器之間用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?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運算,最后恢復原序列。需要注意的是最后一輪并不進行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 服務器解密接收的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)的應用變得越來越廣泛,在帶來海量信息的同時,網(wǎng)絡的開放性和自由性也產(chǎn)生了私有信息被泄露的可能性,網(wǎng)絡信息的安全性變得日益重要起來。對于目前存在的網(wǎng)絡安全問題,為了提高信息傳輸?shù)陌踩?,該文以Windows Socket網(wǎng)絡通信方式為例,采用AES的高級加密方法進行加密傳輸,可以有效避免信息在傳輸過程中被別人竊用。

        [1]張潔,朱麗娟.DES加密算法分析與實現(xiàn)[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++編程實現(xiàn)[J]計算機安全,2007(12):44-46.

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

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

        [8]王茂林,賀富強.Socket在局域網(wǎ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)絡通信密文解密
        解密“熱脹冷縮”
        一種針對格基后量子密碼的能量側(cè)信道分析框架
        一種支持動態(tài)更新的可排名密文搜索方案
        基于模糊數(shù)學的通信網(wǎng)絡密文信息差錯恢復
        解密“一包三改”
        少先隊活動(2020年9期)2020-12-17 06:17:31
        炫詞解密
        基于網(wǎng)絡通信的智能照明系統(tǒng)設計
        電子制作(2019年15期)2019-08-27 01:11:48
        網(wǎng)絡通信中信息隱藏技術(shù)的應用
        基于網(wǎng)絡通信的校園智能音箱設計
        電子制作(2018年1期)2018-04-04 01:48:30
        談計算機網(wǎng)絡通信常見問題及技術(shù)發(fā)展
        電子制作(2017年17期)2017-12-18 06:41:06
        日本亚洲一级中文字幕| 国产成人精品a视频| 欧美俄罗斯40老熟妇| 一道久在线无码加勒比| 91热视频在线观看| 国产激情小视频在线观看的| 久9热免费精品视频在线观看| 久久综合激激的五月天| 久久一区二区av毛片国产| 欧美xxxxx高潮喷水| 熟妇激情内射com| 内射交换多p国产| 亚洲精品2区在线观看| 最近中文字幕精品在线| 中国娇小与黑人巨大交| 无码免费一区二区三区| 国内精品人妻无码久久久影院94 | 青青草中文字幕在线播放| 护士的小嫩嫩好紧好爽| 思思久久96热在精品国产| 99热成人精品国产免| 91青青草视频在线播放| 麻豆视频在线播放观看| 和黑人邻居中文字幕在线| 无尽动漫性视频╳╳╳3d| 麻豆国产VA免费精品高清在线| 蓝蓝的天空,白白的云| 亚洲国产日韩a在线乱码| 四虎国产精品免费久久| 国产免费人成视频在线播放播| 91国产视频自拍在线观看| 丁香婷婷激情视频在线播放 | av手机免费在线观看高潮| 内射口爆少妇麻豆| 精品久久久久久中文字幕| 亚洲AV日韩AV高潮喷潮无码| 国产极品大秀在线性色| 国产免码va在线观看免费| 久久久精品人妻一区二区三区| 高潮社区51视频在线观看| 亚洲女同免费在线观看|