📄 udp_server.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 + -