用AES加密实现Socket通信6页_第1页
用AES加密实现Socket通信6页_第2页
用AES加密实现Socket通信6页_第3页
用AES加密实现Socket通信6页_第4页
用AES加密实现Socket通信6页_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用AES加密实现Socket通信2.1、设计目的1、熟悉socket通讯原理2、掌握AES加密算法2.2、系统目标实现客户服务器之间用socket进行通信;发送方传输的消息使用AES加密,接收方对消息解密获取明文。23、实现步骤2.3.1熟悉socket通讯过程socket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话

2、产生;在完成会话后,关闭连接。客户端,使用ClientSocket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。2.3.2熟悉AES高级加密算法加密解密过程AES算法是美国标准技术研究所(NIST)于2001年11月正式发布的,它是一种分组加密算法,处理的最小单元是一个分组,即把明文或密文分成固定长度的分组,进而进行加密或解密处理。AES的分组大小为128比特,可以支持的密钥长度有128、192、256三种,分别称为AES128、AES192、AES256,其中又以A

3、ES128应用最广。AES算法定义了加密过程和解密过程,加密过程和解密过程都是一个周期迭代的过程,迭代的次数由密钥长度决定,对于AES128迭代次数为10。由于采用了迭代过程,而且每次迭代所需要的密钥也不同,AES算法定义了密钥扩展过程,该过程也是一个迭代过程,通过10个周期产生10个不同的密钥供加密和解密使用。在加密和解密过程中128比特的分组被分解成16个字节,并依次从a0到a15命名,这16个字节又映射成一个4x4的字节矩阵。加密和解密过程中每一轮操作都基于这4x4的字节矩阵,每轮的结果又称为状态。数据首先和128比特的原始密钥经过addroundkey运算后再进行10轮运算。10轮运算

4、有字节替换(subbyte)、行移位(shiftrow)、列混合(mixcolumns)和轮密钥混合(addroundkey)组成,其中算法定义最后一轮运算不进行列混合操作。(1) 字节替换 字节代换运算是一个可逆的非线性字节代换操作,该运算处理的最小单位是一个字节,也就是4x4字节矩阵中的一个元素。对字节的替换操作可以基于一个代换表(又称S盒)。字节替换表由两个独立的变换组成:有限域GF(28)中字节的乘法逆运算和有限域GF(2)中的仿射变换。 (2) 行移位 加密中的行移位在状态的每行间进行,具体方法为将每一行进行循环左移位,即最高位字节移动到最低位字节。具体移位的数目与行的序号有关,第零

5、行不进行移位,第一行循环左移一个字节,第二行循环左移两个字节,第三行循环左移三个字节(3)列混合 列混合主要对状态中的每一列为单位进行处理,每一列看作一个GF(28)下的4位多项式。利用该多项式和c(x)=03x3+01x2+01x+02进行多项式乘法,乘法结果再进行取模运算,模的值为X4+1。(4) 轮密钥混合 轮密钥混合指对密钥中各个字节和相应的轮密钥进行逐位异或,实现数据和密钥的混合。对于加密过程,初始时刻数据和初始密钥进行异或,此后扩展出的轮密钥和状态进行异或操作。算法描述AES加密过程由四个不同的变换组成:Rijnadel(State, CipherKey)/初始化KeyExpans

6、ion( CipherKey, ExpandedKey );/生成子密钥AddRoundKey( State, ExpandedKey ); /与子密钥位与/ 前Nr-1轮State=in;for(i =1; i Checked=!serverListen-Checked; if(serverListen-Checked) ServerSocket-Active=true; StatusBar1-SimpleText=Listenning.; else if(ServerSocket-Active) ServerSocket-Active=false; StatusBar1-SimpleTex

7、t=Not listening.; 客户端建立连接:void _fastcall TForm1:ClientConnect(TObject *Sender, TCustomWinSocket *Socket) Memo1-Lines-Clear(); clientStatusBar-SimpleText = Connect to: + Socket-RemoteHost; Memo1-Lines-Add(Socket-ReceiveText();服务器接受连接:void _fastcall TForm1:ServerSocketAccept(TObject *Sender, TCustomWi

8、nSocket *Socket) StatusBar1-SimpleText=server connect to+Socket-RemoteAddress;客户端加密发送:void _fastcall TForm1:btnclientSendClick(TObject *Sender) AES aes; /读入密钥文件 const unsigned char *key = new unsigned char16; int keyFile=FileOpen(Edit3-Text,fmOpenRead|fmShareExclusive); FileRead(keyFile,(char *)key,

9、16); /读入明文并加密 const unsigned char *plainText= new unsigned char16; int plainFile=FileOpen(Edit2-Text,fmOpenRead|fmShareExclusive); const unsigned char* cipherText; while(FileRead(plainFile,(char *)plainText,16) cipherText = aes.Cipher(plainText, key, 16); /发送密文 AnsiString cipher; cipher=AnsiString(c

10、har *)cipherText); ClientSocket-Socket-SendText(cipher); delete key; delete plainText;服务器接收解密:void _fastcall TForm1:btnDecryptClick(TObject *Sender) AES aes; /读入解密密钥 const unsigned char *key = new unsigned char16; int keyFile=FileOpen(Edit1-Text,fmOpenRead|fmShareExclusive); FileRead(keyFile,(char *

11、)key,16); /读入解密密文 Memo1内容作为cipherText内容,已经存入Edit2中 /解密显示到Memo1上 const unsigned char* plainText; AnsiString memoPlain; const unsigned char* cipherText = new unsigned char16; int cipherFile=FileOpen(Edit2-Text,fmOpenRead|fmShareExclusive); while(FileRead(cipherFile,(char *)cipherText,16) plainText=aes

12、.InvCipher(cipherText,key,16); memoPlain=(AnsiString)(char *)plainText); Memo1-Lines-Add(memoPlain); delete key; delete cipherText;2.4、运行结果左边是发送的密文,右边是解密的结果2.5、心得体会这次实验最大的收获是学会在C+builder下开发,熟悉了一种新的开发环境。从对这个环境一无所知,到做完这个设计,自学能力得到很大提高。为了完成c+builder下的设计,我先后从图书馆借了3本书。综合了3本书上的知识,用到什么学习什么,全部的东西都是崭新的,没有任何模板代码可以参照。过程也很艰辛,因为毕竟不是一点一点积累的学习,不知道c+builder的工程文件和设计文件不能取相同的名字,我服务器端先后重做了四次,第五次的时候偶然间想到也许不应该

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论