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

📄 udp_client.java

📁 这是一个用Java实现ElGamal加密解密和签名验证的算法
💻 JAVA
字号:
/*
 * UDP Client (send)
 *
 * @author Ge ZHANG (2937207)
 * @login name: gz847
 * @version 1.00 07/08/11*/

import java.awt.*;
import java.net.*;
import java.awt.event.*;
import javax.swing.*;
import java.math.BigInteger;
import java.security.*;
import java.io.*;

public class udp_client extends JFrame implements ActionListener{

    JTextField chips, sender, sender_add, receiver, receiver_add;
    JLabel sender_name;
    JLabel sender_IP;
    JLabel receiver_name;
    JLabel receiver_IP;
    JButton sendButton;
    JButton exitButton;
    JLabel instructionField;
    InetAddress internetAddress;
    
    static ElGamalSignature esign;
	static ElGamalEncryption encrypt;
    static ElGamalKeyPairGenerator ekpg;
    static KeyPair epair;
    
    ElGamalPrivateKey eprik;
    ElGamalPublicKey epubk;
    	

    udp_client(){
		// initialize the application frame
		super("UDP Client");
		setLayout(new FlowLayout());
		setSize(810, 500);
		encrypt = new ElGamalEncryption();
		esign = new ElGamalSignature();
			try{
		    		BufferedReader eprik_in = new BufferedReader(new FileReader("prikey.txt"));
		        	String[] epri_buf = eprik_in.readLine().split(",");
		        	String usrname_pri = new String(epri_buf[0]);
		        	String[] epri_key_buf = epri_buf[1].split(":");
		        	BigInteger k1, g1, p1;
		        	k1 = new BigInteger(epri_key_buf[0]);
		        	g1 = new BigInteger(epri_key_buf[1]);
		        	p1 = new BigInteger(epri_key_buf[2]);
		        	eprik = new ElGamalPrivateKey(k1, g1, p1);
		        	eprik_in.close();
		        	
		        	encrypt.engineInitDecrypt(eprik);
		        	
		        	BufferedReader epubk_in = new BufferedReader(new FileReader("pubkey.txt"));
		        	String[] epub_buf = epubk_in.readLine().split(",");
		        	String usrname_pub = new String(epub_buf[0]);
		        	String[] epub_key_buf = epub_buf[1].split(":");
		        	BigInteger k2, g2, p2;
		        	k2 = new BigInteger(epub_key_buf[0]);
		        	g2 = new BigInteger(epub_key_buf[1]);
		        	p2 = new BigInteger(epub_key_buf[2]);
		        	epubk = new ElGamalPublicKey(k2, g2, p2);
		        	epubk_in.close();
		        	
		        	esign.engineInitVerify(epubk);
		        }
		        catch(InvalidKeyException ike)
		        {
		        	System.out.println("Invalid Key")	;
		        	
		        	}
	        catch(IOException e)
	        {
	        	System.out.println("Cannot find specific file!");
	        }

		sender = new JTextField(10);
		sender_add = new JTextField(10);
		receiver = new JTextField(10);
		receiver_add = new JTextField("127.0.0.1");
		chips = new JTextField("a", 40);
		Container c = getContentPane();

        
        sender_name = new JLabel("Sender");
        sender_IP = new JLabel("Sender IP");
        receiver_name = new JLabel("Receiver");
        receiver_IP = new JLabel("Receiver IP");
        
        c.add(sender_name);
        c.add(sender);
        c.add(sender_IP);
        c.add(sender_add);
        c.add(receiver_name);
        c.add(receiver);
        c.add(receiver_IP);
        c.add(receiver_add);
        c.add(chips);
        
		sendButton = new JButton("Send Message");
		JPanel panel = new JPanel();
		panel.add(sendButton);

		exitButton = new JButton("Exit");
		panel.add(exitButton);
		exitButton.setBackground(Color.red);
		c.add(panel,BorderLayout.SOUTH);

		instructionField = new JLabel("Enter your message here!");
		instructionField.reshape(10, 380, 290, 30);
		instructionField.setHorizontalAlignment(SwingConstants.CENTER);
		c.add(instructionField,BorderLayout.SOUTH);

		sendButton.addActionListener(this);
		exitButton.addActionListener(this);
    }

    public void actionPerformed(ActionEvent evt) {
	    if(evt.getSource() == sendButton){
        	
	        String Sender_Name = sender.getText();
	        String numChips = new String(Sender_Name);
	       
	    	numChips = numChips.concat("\n");
	        numChips = numChips.concat(chips.getText());
	        
	        System.out.println(numChips);
	        
	        String hash_msg = MD5.md5(numChips);
	        
	        
	        byte[] signed_hash_msg = new byte[10];
	        
	        try{
	        	esign.engineInitSign(eprik);
	        	
	        	esign.engineUpdate(hash_msg.getBytes(), 0, hash_msg.length());
	    	    signed_hash_msg = esign.engineSign();
	    	    
	    	    encrypt.engineInitEncrypt(epubk);
    		
	        }
	        catch(InvalidKeyException ike)
    	    {
    		   System.out.println("Invalid Key!");
    	    }
    	    catch(SignatureException s)
    	    {
    		   System.out.println("Signature Error Occured!");
    	    }
    	    
    	    BigInteger msg_num = new BigInteger(numChips.getBytes());
    	    BigInteger[] encryptedmsg = encrypt.engineEncrypt(msg_num);
    	    
    	    System.out.println(encryptedmsg[1]);
    	    
			try{
				 String Receiver_IP = receiver_add.getText();
			    internetAddress = InetAddress.getByName(Receiver_IP);
			}catch(Exception exc){
			    System.out.println("Error! - " + exc.toString());
			}
	        // send a message
	        try {
	            // format a UDP packet
	            instructionField.setText("Sending Message...");
	            System.out.println(encryptedmsg[0] + " " + encryptedmsg[1]);
	            DatagramPacket packet0 = new DatagramPacket(
	            	         signed_hash_msg, signed_hash_msg.length, internetAddress, 8505);
	            	         
	            DatagramPacket packet1 = new DatagramPacket(
					         encryptedmsg[0].toByteArray(), encryptedmsg[0].toByteArray().length, internetAddress, 8505);

	            DatagramPacket packet2 = new DatagramPacket(
					         encryptedmsg[1].toByteArray(), encryptedmsg[1].toByteArray().length, internetAddress, 8505);

	            DatagramSocket socket = new DatagramSocket();
	            socket.send(packet0);
	            socket.send(packet1);
	            socket.send(packet2);
	            System.out.println("packet sent.");
	            
	        } catch(Exception exc){
	            System.out.println("Error! - " + exc.toString());
	        }

	        // display final result
	        instructionField.setText("Sent Message!");
	     } else if(evt.getSource() == exitButton){
	           System.exit(0);
	     }

    }

    public static void main(String args[]){
	    udp_client clt = new udp_client();
	    clt.show();
    }
}

⌨️ 快捷键说明

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