20145334 第五次 java 实验报告

实验内容
1.掌握Socket程序的编写;

2.掌握密码技术的使用;

3.设计安全传输系统。

我和20145306张文锦组队编程 http://www.cnblogs.com/besti145306/p/5471075.html 他负责客户端,我负责服务端

查看ip地址 和端口号占用情况

TCP内容:
服务器端代码如下:

package 实验5;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerTest
{      
    public static final int PORT = 8081; 
    public static void main(String[] args)       
            throws IOException   
    {                  
        ServerSocket s = new ServerSocket(PORT);      
        System.out.println("Started:"+s);       
        try         
        {       
            Socket socket = s.accept();    
            try                      
            {                      
                System.out.println("Connection accepted:"+socket);       
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));    
                PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); 
                while(true)        
                {                
                    String str=in.readLine();     
                    if(str.equals("END"))         
                        break;                  
                    System.out.print("Echoing:"+str);        
                    out.println(str);                   
                }                  
            }                     
            finally                  
            {                         
                System.out.println("closing...");        
                socket.close();               
            }                  
        }                
        finally            
        {                        
            s.close();            
        }      
    }
}

•加密算法

package Server;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.math.BigInteger;
import java.security.interfaces.RSAPrivateKey;
public class Dec_RSA{
    public String decodestring="";
    public Dec_RSA(String ctext) throws Exception{
        BigInteger c=new BigInteger(ctext);
        FileInputStream f=new FileInputStream("Skey_RSA_priv.dat");
        ObjectInputStream b=new ObjectInputStream(f);
        RSAPrivateKey prk=(RSAPrivateKey)b.readObject( );
        BigInteger d=prk.getPrivateExponent();
        BigInteger n=prk.getModulus();
        BigInteger m=c.modPow(d,n);
        byte[] mt=m.toByteArray();
        for(int i=0;i<mt.length;i++){
            decodestring+=(char)(mt[i]);
        }


    }
}

服务器端网络编程步骤
•服务器属于被动等待连接,所以首先要进行监听端口,等待客户端进行连接。
•在客户端连接之后,服务器就获得一个与客户端之间的连接,二者就可以通过这个连接进行数据交换了。
•服务器接收到客户端传来的数据之后要进行处理,针对本次实验来说,客户端传来的数据是加密过的,所以服务器需要进行解密的操作:
•首先要使用服务器端RSA的私钥对DES的密钥进行解密
•再将十六进制数据转换成十进制
•之后用解密得到的DES密钥对DES进行解密
•然后使用解密得到的DES对十进制进制密文数据进行解密
•最后将得到的十进制明文用“UTF-8”转码成明文字符
•解密之后得到明文之后还需要验证数据完整性,在这里使用Hash函数来检测。
•检测成功之后再向客户端返回数据表示匹配成功或者失败
•最后关闭连接。

双方匹配成功,并在客户端显示“匹配成功”的消息

原文地址:https://www.cnblogs.com/bestizwh/p/5471371.html