网络安全实验代码.docx

上传人:b****7 文档编号:23744837 上传时间:2023-05-20 格式:DOCX 页数:18 大小:245.63KB
下载 相关 举报
网络安全实验代码.docx_第1页
第1页 / 共18页
网络安全实验代码.docx_第2页
第2页 / 共18页
网络安全实验代码.docx_第3页
第3页 / 共18页
网络安全实验代码.docx_第4页
第4页 / 共18页
网络安全实验代码.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

网络安全实验代码.docx

《网络安全实验代码.docx》由会员分享,可在线阅读,更多相关《网络安全实验代码.docx(18页珍藏版)》请在冰豆网上搜索。

网络安全实验代码.docx

网络安全实验代码

用wireshark抓到的“nihao”对应的密文TCP包

下图是wireshark抓到到的“nihao”的明文包,上图是Console窗口显示的其对应密文

服务器将数据通过encrypt()方法加密,通过TCP传输给客户端,客户端通过dencrypt()方法进行解密。

而客户端发给服务器的是明文。

DES加密类:

publicclassDESPlus{

privatestaticStringstrDefaultKey="national";

privateCipherencryptCipher=null;

privateCipherdecryptCipher=null;

/**

*将byte数组转换为表示16进制值的字符串,如:

byte[]{8,18}转换为:

0813,和publicstaticbyte[]

*hexStr2ByteArr(StringstrIn)互为可逆的转换过程

*

*paramarrB

*需要转换的byte数组

*return转换后的字符串

*throwsException

*本方法不处理任何异常,所有异常全部抛出

*/

publicStringbyteArr2HexStr(byte[]arrB)throwsException{

intiLen=arrB.length;

//每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍

StringBuffersb=newStringBuffer(iLen*2);

for(inti=0;i

intintTmp=arrB[i];

//把负数转换为正数

while(intTmp<0){

intTmp=intTmp+256;

}

//小于0F的数需要在前面补0

if(intTmp<16){

sb.append("0");

}

sb.append(Integer.toString(intTmp,16));

}

returnsb.toString();

}

/**

*将表示16进制值的字符串转换为byte数组,和publicstaticStringbyteArr2HexStr(byte[]arrB)

*互为可逆的转换过程

*

*paramstrIn

*需要转换的字符串

*return转换后的byte数组

*throwsException

*本方法不处理任何异常,所有异常全部抛出

*/

publicbyte[]hexStr2ByteArr(StringstrIn)throwsException{

byte[]arrB=strIn.getBytes();

intiLen=arrB.length;

//两个字符表示一个字节,所以字节数组长度是字符串长度除以2

byte[]arrOut=newbyte[iLen/2];

for(inti=0;i

StringstrTmp=newString(arrB,i,2);

arrOut[i/2]=(byte)Integer.parseInt(strTmp,16);

}

returnarrOut;

}

/**

*默认构造方法,使用默认密钥

*

*throwsException

*/

publicDESPlus()throwsException{

this(strDefaultKey);

}

/**

*指定密钥构造方法

*

*paramstrKey

*指定的密钥

*throwsException

*/

publicDESPlus(StringstrKey)throwsException{

Security.addProvider(newcom.sun.crypto.provider.SunJCE());

Keykey=getKey(strKey.getBytes());

encryptCipher=Cipher.getInstance("DES");

encryptCipher.init(Cipher.ENCRYPT_MODE,key);

decryptCipher=Cipher.getInstance("DES");

decryptCipher.init(Cipher.DECRYPT_MODE,key);

}

/**

*加密字节数组

*

*paramarrB

*需加密的字节数组

*return加密后的字节数组

*throwsException

*/

publicbyte[]encrypt(byte[]arrB)throwsException{

returnencryptCipher.doFinal(arrB);

}

/**

*加密字符串

*

*paramstrIn

*需加密的字符串

*return加密后的字符串

*throwsException

*/

publicStringencrypt(StringstrIn)throwsException{

returnbyteArr2HexStr(encrypt(strIn.getBytes()));

}

/**

*解密字节数组

*

*paramarrB

*需解密的字节数组

*return解密后的字节数组

*throwsException

*/

publicbyte[]decrypt(byte[]arrB)throwsException{

returndecryptCipher.doFinal(arrB);

}

/**

*解密字符串

*

*paramstrIn

*需解密的字符串

*return解密后的字符串

*throwsException

*/

publicStringdecrypt(StringstrIn)throwsException{

returnnewString(decrypt(hexStr2ByteArr(strIn)));

}

/**

*从指定字符串生成密钥,密钥所需的字节数组长度为8位不足8位时后面补0,超出8位只取前8位

*

*paramarrBTmp

*构成该字符串的字节数组

*return生成的密钥

*throwsjava.lang.Exception

*/

privateKeygetKey(byte[]arrBTmp)throwsException{

//创建一个空的8位字节数组(默认值为0)

byte[]arrB=newbyte[8];

//将原始字节数组转换为8位

for(inti=0;i

arrB[i]=arrBTmp[i];

}

//生成密钥

Keykey=newjavax.crypto.spec.SecretKeySpec(arrB,"DES");

returnkey;

}

}

服务器程序:

publicclassChatServerJFrame_TCPextendsJFrameimplementsActionListener{

/**

*

*/

privatestaticfinallongserialVersionUID=1L;

privateDESPlusdes=null;

ServerSocketserSkt;

SocketscSkt;

DataInputStreamdin;

DataOutputStreamdout;

JTextAreamsg;

JTextFieldtxt_str_send;

JButtonsendBtn,exitBtn;

ChatServerJFrame_TCP(){

setTitle("聊天室-服务器");

msg=newJTextArea(100,250);

msg.setBackground(Color.white);

msg.setEditable(false);

add(msg);//存放双方聊天记录的文本区

JLabelsend_lbl=newJLabel("请输入要发送的消息");

txt_str_send=newJTextField(20);

txt_str_send.addActionListener(this);//发送内容文本框

sendBtn=newJButton("发送");

sendBtn.addActionListener(this);//发送按钮

exitBtn=newJButton("退出");

exitBtn.addActionListener(this);//退出按钮

JPaneljp=newJPanel();

jp.add(send_lbl);

jp.add(txt_str_send);

jp.add(sendBtn);

jp.add(exitBtn);

add(jp,BorderLayout.SOUTH);

setSize(500,400);

//setLocation(400,400);

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

try{

serSkt=newServerSocket(6600);//在6600端口监听

scSkt=serSkt.accept();

din=newDataInputStream(scSkt.getInputStream());

dout=newDataOutputStream(scSkt.getOutputStream());

//返回socket的数据输入流和输出流

}catch(IOExceptione){

e.printStackTrace();

}

}

publicvoidsendMessage()throwsException{//发送方法

try{

StringstrToClient=txt_str_send.getText().trim();

//提取文本框输入内容

if(strToClient.equals("")){//发送内容不能为空

JOptionPane.showMessageDialog(null,"发送内容不能为空");

txt_str_send.requestFocus();

return;

}else{//将内容发送给客户机,同时显示在聊天记录文本区中

msg.setForeground(Color.red);

msg.append("服务器说:

"+strToClient+"\n");

des=newDESPlus();

strToClient=des.encrypt(strToClient);

dout.writeUTF(strToClient);

txt_str_send.setText("");

}

}catch(IOExceptionie1){

ie1.printStackTrace();

}

}

publicvoidreceiveMessage(){//接受信息方法

try{

while(true){//可以不断地接收对方发送过来的消息

StringstrFromClient=din.readUTF();

System.out.println("客户端发给服务器的密文:

"+strFromClient);

/*try{

des=newDESPlus();

strFromClient=des.decrypt(strFromClient);

}catch(Exceptionex){

ex.printStackTrace();

}*/

msg.setForeground(Color.red);

msg.append("客户端说:

"+strFromClient+"\n");

}

}catch(IOExceptionie2){

msg.append("您的聊天客户已经离开了!

"+"\n");

}finally{

try{

din.close();

dout.close();

scSkt.close();

}catch(IOExceptionex){

ex.printStackTrace();

}

System.exit(0);

}

}

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==txt_str_send){

try{

sendMessage();

}catch(Exceptionex){

ex.printStackTrace();

}

 

}elseif(e.getSource()==sendBtn){

try{

sendMessage();

}catch(Exceptionex){

ex.printStackTrace();

}

}elseif(e.getSource()==exitBtn){

System.exit(0);

}

}

publicstaticvoidmain(String[]args){

ChatServerJFrame_TCPchatServer=newChatServerJFrame_TCP();

chatServer.receiveMessage();//调用接收消息方法

}

}

 

客户端程序:

publicclassChatClientJFrame_TCPextendsJFrameimplementsActionListener{

/**

*

*/

privatestaticfinallongserialVersionUID=1L;

privateDESPlusdes=null;

ServerSocketserSkt;

SocketscSkt;

DataInputStreamdin;

DataOutputStreamdout;

JTextAreamsg;

JTextFieldtxt_str_send;

JButtonsendBtn,exitBtn;

Stringhost="localhost";

intport=6600;

ChatClientJFrame_TCP(){

setTitle("聊天室-客户端");

msg=newJTextArea(100,250);

msg.setBackground(Color.white);

msg.setEditable(false);

add(msg);//存放双方聊天记录的文本区

JLabelsend_lbl=newJLabel("请输入要发送的消息");

txt_str_send=newJTextField(20);

txt_str_send.addActionListener(this);//发送内容文本框

sendBtn=newJButton("发送");

sendBtn.addActionListener(this);//发送按钮

exitBtn=newJButton("退出");

exitBtn.addActionListener(this);//退出按钮

JPaneljp=newJPanel();

jp.add(send_lbl);

jp.add(txt_str_send);

jp.add(sendBtn);

jp.add(exitBtn);

add(jp,BorderLayout.SOUTH);

setSize(500,400);

//setLocation(400,400);

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

try{

scSkt=newSocket(host,port);

din=newDataInputStream(scSkt.getInputStream());

dout=newDataOutputStream(scSkt.getOutputStream());

//返回socket的数据输入流和输出流

}catch(IOExceptione){

e.printStackTrace();

}

}

publicvoidsendMessage(){//发送方法

try{

StringstrToClient=txt_str_send.getText().trim();

//提取文本框输入内容

if(strToClient.equals("")){//发送内容不能为空

JOptionPane.showMessageDialog(null,"发送内容不能为空");

txt_str_send.requestFocus();

return;

}else{//将内容发送给客户机,同时显示在聊天记录文本区中

msg.setForeground(Color.red);

msg.append("客户端说:

"+strToClient+"\n");

try{

des=newDESPlus();

strToClient=des.encrypt(strToClient);

}catch(Exceptionex){

ex.printStackTrace();

}

dout.writeUTF(strToClient);

txt_str_send.setText("");

}

}catch(IOExceptionie1){

ie1.printStackTrace();

}

}

publicvoidreceiveMessage(){//接受信息方法

try{

while(true){//可以不断地接收对方发送过来的消息

StringstrFromClient=din.readUTF();

System.out.println("服务器发给客户端的密文:

"+strFromClient);

try{

des=newDESPlus();

strFromClient=des.decrypt(strFromClient);

}catch(Exceptionex){

ex.printStackTrace();

}

msg.setForeground(Color.red);

msg.append("服务器说:

"+strFromClient+"\n");

}

}catch(IOExceptionie2){

msg.append("服务器选择结束和您的本次聊天!

"+"\n");

}finally{

try{

din.close();

dout.close();

scSkt.close();

}catch(IOExceptionex){

ex.printStackTrace();

}

System.exit(0);

}

}

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==txt_str_send){

sendMessage();

}elseif(e.getSource()==sendBtn){

sendMessage();

}elseif(e.getSource()==exitBtn){

System.exit(0);

}

}

publicstaticvoidmain(String[]args){

ChatClientJFrame_TCPchatServer=newChatClientJFrame_TCP();

chatServer.receiveMessage();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文学研究

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1