import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigInteger;
import java.util.Vector;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.filechooser.FileFilter;
//import com.jtattoo.plaf.bernstein.BernsteinLookAndFeel;
//import com.jtattoo.plaf.noire.NoireLookAndFeel;
public class RSADemo {
public RSADemo() {
new RSAFrame();
}
public static void main(String[] args) {
new RSADemo();
}
private class RSAFrame {
private JFrame mainframe;
private File oldfile;
private File cryptedfile;
private JTextField pathwarning;
private JTextField pathwarningx;
private Vector<Integer> v; // 源文信息存放
private Vector<BigInteger> C; // 密文信息存放
private JTextPane jt;
private JTextPane jtx;
public RSAFrame() {
// RSADemo.setLookAndFeel();
mainframe = new JFrame("");
// -------------------------------------
mainframe.add(this.getTabbedPane());
// -------------------------------------
mainframe.setBounds(300, 200, 600, 400);
mainframe.setVisible(true);
mainframe.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
mainframe.dispose();
}
});
}
public JFrame getMainFrame() {
return this.mainframe;
}
private JTabbedPane getTabbedPane() {
JTabbedPane jtp = new JTabbedPane();
JPanel jp1 = new JPanel();
jp1.setLayout(new BorderLayout());
jp1.add(this.getNorthPanel(), BorderLayout.NORTH);
jp1.add(this.getCentrePanel(), BorderLayout.CENTER);
jp1.add(this.getSouth(), BorderLayout.SOUTH);
jtp.add("加密", jp1);
JPanel jp2 = new JPanel();
jp2.setLayout(new BorderLayout());
jp2.add(this.getNorthPanelX(), BorderLayout.NORTH);
jp2.add(this.getCentrePanelX(), BorderLayout.CENTER);
jp2.add(this.getSouthPanelX(),BorderLayout.SOUTH);
jtp.add("解密", jp2);
JPanel jp0 = new JPanel();
JButton jb = new JButton("清空数据");
jb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
mainframe.dispose();
new RSADemo();
}
});
jp0.add(jb);
jtp.add("清空",jp0);
JPanel jp3 = new JPanel();
String str = "\n\t基于RSA文件加密系统 \n组员:\n\t王欢 (03112072)\n\t 聂子潇(03112073)\n\t雷荣月(03112037)\n导师:\n\t张俊伟 ";
JTextArea jta = new JTextArea(str);
jta.setPreferredSize(new Dimension(300,200));
jta.setLayout(new FlowLayout());
jp3.add(jta);
jtp.add("关于", jp3);
return jtp;
}
private JPanel getNorthPanelX() {
JPanel jp = new JPanel();
jp.setLayout(new FlowLayout(FlowLayout.LEFT));
JButton openButton = new JButton("打开");
openButton.setPreferredSize(new Dimension(60, 20));
jp.add(openButton);
pathwarningx = new JTextField("未读取文件");
pathwarningx.setPreferredSize(new Dimension(350, 20));
pathwarningx.setEditable(false);
jp.add(pathwarningx);
openButton.addActionListener(new OpenFileActionListenerX());
JButton decryptButton = new JButton("解密");
decryptButton.setPreferredSize(new Dimension(60, 20));
decryptButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
RSA rsa = new RSA(".\\key", "RSA.KEY");
FileReader fr = new FileReader(cryptedfile
.getAbsoluteFile());
C = new Vector<BigInteger>();
int cha;
C.clear();
String str = "";
System.out.println();
while ((cha = fr.read()) != -1) {
if (cha != ' ')
str += cha - '0';
else {
BigInteger tmp = new BigInteger(str);
C.add(tmp);
str = "";
}
}
v = rsa.Decipher(C);
for (int j = 0; j < v.size(); j++) {
int tmp = v.get(j);
jtx.setText(jtx.getText() + (char) tmp);
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e3) {
e3.printStackTrace();
} catch (RSA.KeyFileNotFoundException e2) {
e2.printStackTrace();
}
}
});
jp.add(decryptButton);
final TitledBorder titleborder = new TitledBorder("打开要解密的文件");
jp.setBorder(titleborder);
jp.setOpaque(false);
return jp;
}
private JScrollPane getCentrePanelX() {
jtx = new JTextPane();
jtx.setEditable(false);
jtx.setPreferredSize(new Dimension(500, 300));
JScrollPane jpt = new JScrollPane(jtx);
final TitledBorder titleborder = new TitledBorder("解密显示框");
jpt.setBorder(titleborder);
jpt.setOpaque(false);
return jpt;
}
private JPanel getSouthPanelX() {
JPanel jp = new JPanel();
jp.setLayout(new FlowLayout(FlowLayout.RIGHT));
final JLabel jl = new JLabel("导出目录为:当前目录->output->decryptgraph.txt");
jp.add(jl);
JButton jb = new JButton("导出");
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
FileWriter fwc;
try {
fwc = new FileWriter(".\\output\\decryptgraph.txt");
for (int j = 0; j < v.size(); j++) {
int tmp = v.get(j);
fwc.write(tmp);
fwc.flush();
}
fwc.close();
jl
.setText("文件导出成功,请在 当前目录->output->decryptgraph.txt 下查看");
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
jb.setPreferredSize(new Dimension(60, 20));
jp.add(jb);
final TitledBorder titleborder = new TitledBorder("加密信息导出");
jp.setBorder(titleborder);
jp.setOpaque(false);
return jp;
}
private JPanel getNorthPanel() {
JPanel jp = new JPanel();
jp.setLayout(new FlowLayout(FlowLayout.LEFT));
JButton openButton = new JButton("打开");
openButton.setPreferredSize(new Dimension(60, 20));
openButton.addActionListener(new OpenFileActionListener());
jp.add(openButton);
pathwarning = new JTextField("未读取文件");
pathwarning.setPreferredSize(new Dimension(350, 20));
pathwarning.setEditable(false);
jp.add(pathwarning);
JButton encryptButton = new JButton("加密");
encryptButton.setPreferredSize(new Dimension(60, 20));
encryptButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
RSA rsa = new RSA(".\\key", "RSA.KEY");
v = new Vector<Integer>();
FileReader fr = new FileReader(oldfile
.getAbsoluteFile());
int ch;
while ((ch = fr.read()) != -1) {
v.add(ch);
}
C = (Vector<BigInteger>) rsa.Encrypt(v);
for (int i = 0; i < C.size(); i++) {
jt.setText(jt.getText()
+ ((BigInteger) C.get(i)).toString() + "#");
}
oldfile = null;
} catch (IOException e1) {
e1.printStackTrace();
} catch (RSA.KeyFileNotFoundException e1) {
e1.printStackTrace();
}
}
});
jp.add(encryptButton);
final TitledBorder titleborder = new TitledBorder("打开要加密的文件");
jp.setBorder(titleborder);
jp.setOpaque(false);
return jp;
}
private JScrollPane getCentrePanel() {
jt = new JTextPane();
jt.setEditable(false);
jt.setPreferredSize(new Dimension(500, 300));
JScrollPane jpt = new JScrollPane(jt);
final TitledBorder titleborder = new TitledBorder("加密显示框");
jpt.setBorder(titleborder);
jpt.setOpaque(false);
return jpt;
}
private JPanel getSouth() {
JPanel jp = new JPanel();
jp.setLayout(new FlowLayout(FlowLayout.RIGHT));
final JLabel jl = ne