⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 recnode.java

📁 采用RSA公秘钥体制和MD5签名算法的安全通信
💻 JAVA
字号:
/*
 * 监听连接:2000
 * 接收DesKey:2001
 * 发送RsaPublicKey:2002
 * 接收RsaPublicKey:2004
 * 接收消息:2003
 */
import java.awt.BorderLayout;
import java.awt.Rectangle;
import javax.swing.*;
import javax.crypto.SecretKey;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

import java.awt.Dimension;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.Key;
import java.security.PublicKey;

import javax.swing.JScrollPane;

public class RecNode extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JPanel jPanel = null;
	private static JTextArea jTextArea = null;
	private JPanel jPanel1 = null;
	static JTextArea jTextArea1 = null;
	private static JTextArea jTextArea3 = null;
	private JScrollPane jScrollPane = null;
	private static JTextArea jTextArea4 = null;
	private JScrollPane jScrollPane1 = null;
	private JScrollPane jScrollPane2 = null;
	
	
	private static RSA rsa = new RSA();  
	private static DES des = new DES();  //  @jve:decl-index=0:
	private static PublicKey publicKey;  //  @jve:decl-index=0:
	private JScrollPane jScrollPane3 = null;
	private JButton jButton = null;
    private String IP;
	private JButton jButton1 = null;
	private JButton jButton2 = null;
	byte[] revDes ;
	public static void setPublicKey(PublicKey k){
		publicKey = k;
	}

	public static PublicKey getPublicKey(){
		return publicKey;
	}
	
	/**
	 * This method initializes jPanel	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(null);
			jPanel.setBounds(new Rectangle(2, 1, 312, 246));
			jPanel.add(getJScrollPane(), null);
			jPanel.add(getJScrollPane1(), null);
			jPanel.add(getJScrollPane2(), null);
			jPanel.add(getJButton1(), null);
			jPanel.add(getJButton2(), null);
		}
		return jPanel;
	}

	/**
	 * This method initializes jTextArea	
	 * 	
	 * @return javax.swing.JTextArea	
	 */
	private JTextArea getJTextArea() {
		if (jTextArea == null) {
			jTextArea = new JTextArea();
			jTextArea.setLineWrap(true);
			jTextArea.setBorder(BorderFactory.createTitledBorder("Received DES Key:"));
		}
		return jTextArea;
	}

	/**
	 * This method initializes jPanel1	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel1() {
		if (jPanel1 == null) {
			jPanel1 = new JPanel();
			jPanel1.setLayout(null);
			jPanel1.setBounds(new Rectangle(2, 246, 313, 138));
			jPanel1.add(getJScrollPane3(), null);
			jPanel1.add(getJButton(), null);
		}
		return jPanel1;
	}

	/**
	 * This method initializes jTextArea1	
	 * 	
	 * @return javax.swing.JTextArea	
	 */
	private static JTextArea getJTextArea1() {
		if (jTextArea1 == null) {
			jTextArea1 = new JTextArea();
			jTextArea1.setName("jTextArea");
			jTextArea1.setLineWrap(true);
			jTextArea1.setBorder(BorderFactory.createTitledBorder("Message:"));
			
		}
		return jTextArea1;
	}
	public static void appendJTextArea1(String str){
		jTextArea1.append(str);
	}
	public static void appendJTextArea(String str){
		jTextArea.setText("");
		jTextArea.append(str);
	}
	public static void appendJTextArea3(String str){
		jTextArea3.setText("");
		jTextArea3.append(str);
	}
	public static void appendJTextArea4(String str){
		jTextArea4.setText("");
		jTextArea4.append(str);
	}
	/**
	 * This method initializes jTextArea3	
	 * 	
	 * @return javax.swing.JTextArea	
	 */
	private JTextArea getJTextArea3() {
		if (jTextArea3 == null) {
			jTextArea3 = new JTextArea();
			jTextArea3.setLineWrap(true);
			jTextArea3.setBorder(BorderFactory.createTitledBorder("Decrypted Key:"));
		}
		return jTextArea3;
	}

	/**
	 * This method initializes jScrollPane	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setBorder(BorderFactory.createTitledBorder("Received Public Key:"));
			jScrollPane.setViewportView(getJTextArea4());
			jScrollPane.setBounds(new Rectangle(1, 1, 310, 68));
		}
		return jScrollPane;
	}
	/**
	 * This method initializes jTextArea4	
	 * 	
	 * @return javax.swing.JTextArea	
	 */
	private static JTextArea getJTextArea4() {
		if (jTextArea4 == null) {
			jTextArea4 = new JTextArea();
			jTextArea4.setLineWrap(true);
		}
		return jTextArea4;
	}
	/**
	 * This method initializes jScrollPane1	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane1() {
		if (jScrollPane1 == null) {
			jScrollPane1 = new JScrollPane();
			jScrollPane1.setBounds(new Rectangle(1, 70, 310, 68));
			jScrollPane1.setViewportView(getJTextArea());
		}
		return jScrollPane1;
	}
	/**
	 * This method initializes jScrollPane2	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane2() {
		if (jScrollPane2 == null) {
			jScrollPane2 = new JScrollPane();
			jScrollPane2.setBounds(new Rectangle(1, 174, 313, 68));
			jScrollPane2.setViewportView(getJTextArea3());
		}
		return jScrollPane2;
	}
	/**
	 * This method initializes jScrollPane3	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane3() {
		if (jScrollPane3 == null) {
			jScrollPane3 = new JScrollPane();
			jScrollPane3.setBounds(new Rectangle(1, 1, 310, 100));
			jScrollPane3.setViewportView(getJTextArea1());
		}
		return jScrollPane3;
	}
	/**
	 * This method initializes jButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setBounds(new Rectangle(64, 109, 174, 25));
			jButton.setText("Send RSA Public Key");
			jButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
					try{
						  Socket s = new Socket(InetAddress.getByName(IP),2004);
						  ObjectOutputStream objout = new ObjectOutputStream(s.getOutputStream());
						  objout.writeObject(rsa.getPublicKey());
						  objout.flush();
					  }catch(Exception ex){
						  ex.printStackTrace();
					  }
				}
			});
		}
		return jButton;
	}
	/**
	 * @param args
	 */
	/////////////////////////////////////////////线程区
	private void ConnectListen()
	{
		new Thread(new Runnable(){
			public void run(){
				ServerSocket ss=null;
				try{
				ss=new ServerSocket(2000);
				}catch(Exception e){
					e.printStackTrace();
					}
				while(1==1){
				try {
					Socket s=ss.accept();
					IP=s.getInetAddress().getHostAddress();
					appendJTextArea1(IP + "has been connected!\n");
					
				}catch(Exception e){
					e.printStackTrace();
					
				}
				}
			}
		}).start();
	}
	
	private void RecDesKey(){
		new Thread(new Runnable(){
			public void run(){
				ServerSocket ss=null;
				try{
				ss=new ServerSocket(2001);
				}catch(Exception e){
					e.printStackTrace();
					}
				while(1==1){
				try{
					Socket s = ss.accept();
					ObjectInputStream objIn = new ObjectInputStream(s.getInputStream());
					byte[] rev = new byte[8192];
					int  k = 0;
					 k = objIn.read(rev);//K为读到的字节数,因为8192已经足够一次读完,因此不用循环地读
					 
					 revDes = new byte[k]; 
					 
					for(int j = 0;j<k; j++){
						revDes[j] = rev[j];
					} 
					
					appendJTextArea(new String(revDes));
					
					
				}catch(Exception e){
					e.printStackTrace();
				}
				}
			}
		}).start();
	}
	
	private void RecMessage(){
		new Thread(new Runnable(){
			public void run(){
				ServerSocket ss=null;
				try{
				ss=new ServerSocket(2003);
				}catch(Exception e){
					e.printStackTrace();
					}
				while(1==1){
				try{
				Socket s = ss.accept();
				ObjectInputStream objIn = new ObjectInputStream(s.getInputStream());
				int messageSize = objIn.readInt();
				byte[] messageByte= new byte[messageSize];
				objIn.readFully(messageByte);
				int signLength = objIn.readInt();
				byte[] signByte= new byte[signLength];
				objIn.readFully(signByte);
				byte[] messageAfterDes = des.decrpty(messageByte);
				byte[] signAfterDes = des.decrpty(signByte);
				MD5withRSA.setPublicKey(getPublicKey());
				if (MD5withRSA.verify(messageAfterDes, signAfterDes))
					appendJTextArea1("authentication is successful!!!\n");
				else appendJTextArea1("authentication is fail!!!\n");
				appendJTextArea1(s.getInetAddress() + ":\n" + 
						new String(messageAfterDes) + "\n");
				
			}catch(Exception e){
				e.printStackTrace();
			}
				
			}
			}
		}).start();
	}
	
	private void RecPublicKey(){
		new Thread(new Runnable(){
			public void run(){
				ServerSocket ss=null;
				try{
				ss=new ServerSocket(2002);
				}catch(Exception e){
					e.printStackTrace();
					}
				while(1==1){
				try{
				Socket s = ss.accept();
				ObjectInputStream objIn= new ObjectInputStream(s.getInputStream());
				PublicKey key = (PublicKey)objIn.readObject();
				setPublicKey(key);
				appendJTextArea4(key.toString());
				objIn.close();
				s.close();
				
			}catch(Exception e){
				e.printStackTrace();
			}
				}
				
			}
			
		}).start();
	}
	
	
	/**
	 * This method initializes jButton1	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton1() {
		if (jButton1 == null) {
			jButton1 = new JButton();
			jButton1.setBounds(new Rectangle(59, 213, 1, 19));
		}
		return jButton1;
	}

	/**
	 * This method initializes jButton2	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton2() {
		if (jButton2 == null) {
			jButton2 = new JButton();
			jButton2.setBounds(new Rectangle(83, 145, 140, 25));
			jButton2.setText("Decrypte");
			jButton2.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
					Key key = rsa.unwrapkey(revDes);
					des.setSecretKey((SecretKey)key);
					appendJTextArea3(key.toString());
				}
			});
		}
		return jButton2;
	}

	/////////////////////////////////////////////////////////
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame thisClass = new RecNode();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}

	/**
	 * This is the default constructor
	 */
	public RecNode() {
		super();
		initialize();
		ConnectListen();
		RecDesKey();
		RecPublicKey();
		RecMessage();
		
	}

	
	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(322, 419);
		this.setContentPane(getJContentPane());
		this.setTitle("Receiver");
		 try
		    {
			 UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
		    }
		    catch(Exception e)
		    {
		    	e.printStackTrace();
		    }
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJPanel(), null);
			jContentPane.add(getJPanel1(), null);
		}
		return jContentPane;
	}


}  //  @jve:decl-index=0:visual-constraint="10,10"  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -