网络安全实验代码Word格式文档下载.docx

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

网络安全实验代码Word格式文档下载.docx

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

网络安全实验代码Word格式文档下载.docx

*/

publicStringbyteArr2HexStr(byte[]arrB)throwsException{

intiLen=arrB.length;

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

StringBuffersb=newStringBuffer(iLen*2);

for(inti=0;

i<

iLen;

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数组

publicbyte[]hexStr2ByteArr(StringstrIn)throwsException{

byte[]arrB=strIn.getBytes();

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

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

i=i+2){

StringstrTmp=newString(arrB,i,2);

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

returnarrOut;

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

publicDESPlus()throwsException{

this(strDefaultKey);

*指定密钥构造方法

*paramstrKey

*指定的密钥

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("

decryptCipher.init(Cipher.DECRYPT_MODE,key);

*加密字节数组

*需加密的字节数组

*return加密后的字节数组

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

returnencryptCipher.doFinal(arrB);

*加密字符串

*需加密的字符串

*return加密后的字符串

publicStringencrypt(StringstrIn)throwsException{

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

*解密字节数组

*需解密的字节数组

*return解密后的字节数组

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

returndecryptCipher.doFinal(arrB);

*解密字符串

*需解密的字符串

*return解密后的字符串

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位

arrBTmp.length&

&

arrB.length;

arrB[i]=arrBTmp[i];

//生成密钥

Keykey=newjavax.crypto.spec.SecretKeySpec(arrB,"

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{//发送方法

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(){//接受信息方法

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

StringstrFromClient=din.readUTF();

System.out.println("

客户端发给服务器的密文:

+strFromClient);

/*try{

strFromClient=des.decrypt(strFromClient);

}catch(Exceptionex){

ex.printStackTrace();

}*/

客户端说:

+strFromClient+"

}catch(IOExceptionie2){

msg.append("

您的聊天客户已经离开了!

+"

}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){

 

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

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

publicstaticvoidmain(String[]args){

ChatServerJFrame_TCPchatServer=newChatServerJFrame_TCP();

chatServer.receiveMessage();

//调用接收消息方法

}

客户端程序:

publicclassChatClientJFrame_TCPextendsJFrameimplementsActionListener{

Stringhost="

localhost"

intport=6600;

ChatClientJFrame_TCP(){

聊天室-客户端"

scSkt=newSocket(host,port);

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

publicvoidsendMessage(){//发送方法

//提取文本框输入内容

try{

des=newDESPlus();

strToClient=des.encrypt(strToClient);

}

System.out.println("

服务器发给客户端的密文:

strFromClient=des.decrypt(strFromClient);

}catch(Exceptionex){

ex.printStackTrace();

服务器选择结束和您的本次聊天!

sendMessage();

ChatClientJFrame_TCPchatServer=newChatClientJFrame_TCP();

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

当前位置:首页 > 求职职场 > 职业规划

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

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