import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextPane;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.PublicKey;
import java.security.interfaces.RSAPublicKey;
public class Client extends JFrame implements Runnable{
private static final long serialVersionUID =
6555473007391854674L;
private JPanel contentPane;
private JTextArea publicKeyArea;//显示公钥面板
private JTextArea
resultArea;//显示接收到的明文以及转换后的密文
private JTextPane port;//接受本机的端口设置
private JTextPane ipArea;//输入目标IP的面板
private JTextPane portArea;//输入目标机的端口号
private JTextPane messageArea;//输入要发送的明文区域
private int portNum;//设置的客户端端口号
private ServerSocket ss=null;
private
Socket socket=null;
private
Thread thread=null;//该线程打开特定的端口号等待连接
private
String sendToip;//要接收方的ip地址
private int sendToport;//要接受方的端口号
private
RSAUtil rsa=null;
private String ee;
private String nn;//公钥参数
private static PublicKey pk;
public static void main(String[] args) {
EventQueue.invokeLater(new
Runnable() {
public void
run() {
try
{
Client
frame = new Client();
frame.setVisible(true);
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Client() {
setTitle("RSA\u52A0\u5BC6\u7B97\u6CD5");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 694,
502);
contentPane = new
JPanel();
contentPane.setBorder(new
EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblNewLabel = new
JLabel("\u516C\u94A5\u53C2\u6570");
lblNewLabel.setFont(new
Font("宋体", Font.PLAIN, 16));
lblNewLabel.setBounds(50, 58,
69, 30);
contentPane.add(lblNewLabel);
JScrollPane scrollPane = new
JScrollPane();
scrollPane.setBounds(159, 28,
464, 86);
contentPane.add(scrollPane);
publicKeyArea = new
JTextArea();
publicKeyArea.setEditable(false);
publicKeyArea.setFont(new
Font("Monospaced", Font.PLAIN, 18));
publicKeyArea.setLineWrap(true);
scrollPane.setViewportView(publicKeyArea);
JScrollPane scrollPane_1 = new
JScrollPane();
scrollPane_1.setBounds(50, 148,
574, 120);
contentPane.add(scrollPane_1);
resultArea = new
JTextArea();
resultArea.setEditable(false);
resultArea.setFont(new
Font("Monospaced", Font.PLAIN, 18));
resultArea.setLineWrap(true);
scrollPane_1.setViewportView(resultArea);
JLabel lblNewLabel_1 = new
JLabel("\u5BA2\u6237\u7AEF\u7AEF\u53E3");
lblNewLabel_1.setFont(new
Font("宋体", Font.PLAIN, 16));
lblNewLabel_1.setBounds(159,
301, 86, 30);
contentPane.add(lblNewLabel_1);
port = new JTextPane();
port.setFont(new Font("宋体",
Font.PLAIN, 18));
port.setBounds(271, 301, 80,
30);
contentPane.add(port);
JButton btnNewButton = new
JButton("\u8BBE\u7F6E");
btnNewButton.addActionListener(new
ActionListener() {
//设置按钮消息事件
public void
actionPerformed(ActionEvent e) {
portNum=Integer.parseInt(port.getText());
thread.start();
}
});
btnNewButton.setFont(new
Font("宋体", Font.PLAIN, 16));
btnNewButton.setBounds(397,
298, 86, 36);
contentPane.add(btnNewButton);
JLabel lblip = new
JLabel("\u53D1\u9001\u65B9IP");
lblip.setFont(new Font("宋体",
Font.PLAIN, 16));
lblip.setBounds(50, 357, 69,
30);
contentPane.add(lblip);
JLabel label_1 = new
JLabel("\u53D1\u9001\u65B9\u7AEF\u53E3");
label_1.setFont(new Font("宋体",
Font.PLAIN, 16));
label_1.setBounds(310, 357, 86,
30);
contentPane.add(label_1);
ipArea = new JTextPane();
ipArea.setFont(new Font("宋体",
Font.PLAIN, 18));
ipArea.setBounds(129, 357, 154,
30);
contentPane.add(ipArea);
thread=new Thread(this);
try {
rsa=new
RSAUtil();
rsa.generateKey();
} catch (Exception e1) {
// TODO
Auto-generated catch block
e1.printStackTrace();
}
JButton button = new
JButton("\u8FDE\u63A5");
button.addActionListener(new
ActionListener() {
//连接按钮消息事件
public void
actionPerformed(ActionEvent e) {
sendToip=ipArea.getText();//目的IP
sendToport=Integer.parseInt(portArea.getText());//目的端口号
try
{
socket=new
Socket(sendToip,sendToport);
JOptionPane.showMessageDialog(null,
"connect success!");
ObjectInputStream
ois=new ObjectInputStream(socket.getInputStream());
try
{
pk = (PublicKey)ois.readObject();
FileOutputStream
f1=new FileOutputStream("Skey_RSA_pub.dat");
ObjectOutputStream b1=new ObjectOutputStream(f1);
b1.writeObject(pk);