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