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

📄 udp_server.java

📁 这是一个用Java实现ElGamal加密解密和签名验证的算法
💻 JAVA
字号:
/*
 * UDP Server (receive)
 *
 * @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_server extends JFrame implements ActionListener{
	
	    static JTextField receivedmsg, plaintext, sendername, verification;
	    JLabel cipher, plain, sender;
	    JButton display, decrypt;
	    
	    static ElGamalSignature esign;
	    static ElGamalEncryption encrypt;
	    static ElGamalKeyPairGenerator ekpg;
	    static KeyPair epair;
	    
	    ElGamalPrivateKey eprik;
        ElGamalPublicKey epubk;
        

	    static    BigInteger[] decryptstr;
	    static    String signstr;
	    
	udp_server(){
		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!");
	        }
	    	
	    	setLayout(new FlowLayout());
		    setSize(810, 500);

		    receivedmsg = new JTextField(40);
			plaintext = new JTextField(40);
			sendername = new JTextField(10);
			verification = new JTextField(10);
			
			cipher = new JLabel("Received Message");
			plain = new JLabel("Decrypted Message");
			sender = new JLabel("Received From:");
			
			setLayout(new FlowLayout());
			setSize(810, 500);
			
			Container c = getContentPane();
			c.add(sender);
			c.add(sendername);
			c.add(cipher);
			c.add(receivedmsg);
			c.add(plain);
			c.add(plaintext);
			c.add(verification);
			
			display = new JButton("Display");
			JPanel panel = new JPanel();
			panel.add(display);
			decrypt = new JButton("Decrypt");
			panel.add(decrypt);
			
			c.add(panel);
	
			display.addActionListener(this);
			decrypt.addActionListener(this);
	    }
	    
    public static void main(String args[]){
	        udp_server  srv = new udp_server();
	        srv.show();
	        waitPacket();
	    }
	    
	    public static void waitPacket()
	{
		
		DatagramSocket socket = null;
        DatagramPacket packet0 = null;
        DatagramPacket packet1 = null;
        DatagramPacket packet2 = null;

	// create a receive buffer
	    byte[] buffer0 = new byte[1024];
	    byte[] buffer1 = new byte[1024];
	    byte[] buffer2 = new byte[1024];

	// create a packet to receive the buffer
	    packet0 = new DatagramPacket(buffer0, 1024);
	    packet1 = new DatagramPacket(buffer1, 1024);
	    packet2 = new DatagramPacket(buffer2, 1024);

	// now create a socket to listen in
	    try	{
	        socket = new DatagramSocket(8505);
	    } catch(Exception e){
	        System.out.println("Error! - " + e.toString());
	    }
	    
	    while(true)	{
	        try {
	            socket.receive(packet0);
	            socket.receive(packet1);
	            socket.receive(packet2);
	        } catch(Exception e) {
		        System.out.println("Error! - " + e.toString());
	        }

	        String temp1 = new String(buffer1, 0, packet1.getLength());
	    	String temp2 = new String(buffer2, 0, packet2.getLength());
	        decryptstr = new BigInteger[2];
	        decryptstr[0] = new BigInteger(temp1.getBytes());
	        decryptstr[1] = new BigInteger(temp2.getBytes());
	        
	        signstr = new String(buffer0, 0, packet0.getLength());
	        
	        receivedmsg.setText(temp2);

			System.out.println(decryptstr[0] + " " + decryptstr[1]);

	    }
	    

    }

	    public void actionPerformed(ActionEvent evt){
		if(evt.getSource() == decrypt)
			{
				try{
					BigInteger C = new BigInteger("0");
    	            C = encrypt.engineDecrypt(decryptstr);
    	            plaintext.setText(C.toString());
    	            
    	            String hash_decrypt_msg = MD5.md5(C.toString());
    	            
		    	    esign.engineUpdate(hash_decrypt_msg.getBytes(), 0, hash_decrypt_msg.getBytes().length);
		    	    boolean veri = esign.engineVerify(signstr.getBytes());
		    		if(veri)
		    			verification.setText("Verification Succeeded!");
		    		else 
		    			verification.setText("Verification Failed!");
				}
		    	catch(SignatureException s)
		    	{
		    		System.out.println("Signature Error Occured!");
		    	}
				
			}
    	}
    
    
}

⌨️ 快捷键说明

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