📄 recnode.java
字号:
/*
* 监听连接:2000
* 接收DesKey:2001
* 发送RsaPublicKey:2002
* 接收RsaPublicKey:2004
* 接收消息:2003
*/
import java.awt.BorderLayout;
import java.awt.Rectangle;
import javax.swing.*;
import javax.crypto.SecretKey;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import java.awt.Dimension;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.Key;
import java.security.PublicKey;
import javax.swing.JScrollPane;
public class RecNode extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JPanel jPanel = null;
private static JTextArea jTextArea = null;
private JPanel jPanel1 = null;
static JTextArea jTextArea1 = null;
private static JTextArea jTextArea3 = null;
private JScrollPane jScrollPane = null;
private static JTextArea jTextArea4 = null;
private JScrollPane jScrollPane1 = null;
private JScrollPane jScrollPane2 = null;
private static RSA rsa = new RSA();
private static DES des = new DES(); // @jve:decl-index=0:
private static PublicKey publicKey; // @jve:decl-index=0:
private JScrollPane jScrollPane3 = null;
private JButton jButton = null;
private String IP;
private JButton jButton1 = null;
private JButton jButton2 = null;
byte[] revDes ;
public static void setPublicKey(PublicKey k){
publicKey = k;
}
public static PublicKey getPublicKey(){
return publicKey;
}
/**
* This method initializes jPanel
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel() {
if (jPanel == null) {
jPanel = new JPanel();
jPanel.setLayout(null);
jPanel.setBounds(new Rectangle(2, 1, 312, 246));
jPanel.add(getJScrollPane(), null);
jPanel.add(getJScrollPane1(), null);
jPanel.add(getJScrollPane2(), null);
jPanel.add(getJButton1(), null);
jPanel.add(getJButton2(), null);
}
return jPanel;
}
/**
* This method initializes jTextArea
*
* @return javax.swing.JTextArea
*/
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
jTextArea.setLineWrap(true);
jTextArea.setBorder(BorderFactory.createTitledBorder("Received DES Key:"));
}
return jTextArea;
}
/**
* This method initializes jPanel1
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel1() {
if (jPanel1 == null) {
jPanel1 = new JPanel();
jPanel1.setLayout(null);
jPanel1.setBounds(new Rectangle(2, 246, 313, 138));
jPanel1.add(getJScrollPane3(), null);
jPanel1.add(getJButton(), null);
}
return jPanel1;
}
/**
* This method initializes jTextArea1
*
* @return javax.swing.JTextArea
*/
private static JTextArea getJTextArea1() {
if (jTextArea1 == null) {
jTextArea1 = new JTextArea();
jTextArea1.setName("jTextArea");
jTextArea1.setLineWrap(true);
jTextArea1.setBorder(BorderFactory.createTitledBorder("Message:"));
}
return jTextArea1;
}
public static void appendJTextArea1(String str){
jTextArea1.append(str);
}
public static void appendJTextArea(String str){
jTextArea.setText("");
jTextArea.append(str);
}
public static void appendJTextArea3(String str){
jTextArea3.setText("");
jTextArea3.append(str);
}
public static void appendJTextArea4(String str){
jTextArea4.setText("");
jTextArea4.append(str);
}
/**
* This method initializes jTextArea3
*
* @return javax.swing.JTextArea
*/
private JTextArea getJTextArea3() {
if (jTextArea3 == null) {
jTextArea3 = new JTextArea();
jTextArea3.setLineWrap(true);
jTextArea3.setBorder(BorderFactory.createTitledBorder("Decrypted Key:"));
}
return jTextArea3;
}
/**
* This method initializes jScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setBorder(BorderFactory.createTitledBorder("Received Public Key:"));
jScrollPane.setViewportView(getJTextArea4());
jScrollPane.setBounds(new Rectangle(1, 1, 310, 68));
}
return jScrollPane;
}
/**
* This method initializes jTextArea4
*
* @return javax.swing.JTextArea
*/
private static JTextArea getJTextArea4() {
if (jTextArea4 == null) {
jTextArea4 = new JTextArea();
jTextArea4.setLineWrap(true);
}
return jTextArea4;
}
/**
* This method initializes jScrollPane1
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane1() {
if (jScrollPane1 == null) {
jScrollPane1 = new JScrollPane();
jScrollPane1.setBounds(new Rectangle(1, 70, 310, 68));
jScrollPane1.setViewportView(getJTextArea());
}
return jScrollPane1;
}
/**
* This method initializes jScrollPane2
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane2() {
if (jScrollPane2 == null) {
jScrollPane2 = new JScrollPane();
jScrollPane2.setBounds(new Rectangle(1, 174, 313, 68));
jScrollPane2.setViewportView(getJTextArea3());
}
return jScrollPane2;
}
/**
* This method initializes jScrollPane3
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane3() {
if (jScrollPane3 == null) {
jScrollPane3 = new JScrollPane();
jScrollPane3.setBounds(new Rectangle(1, 1, 310, 100));
jScrollPane3.setViewportView(getJTextArea1());
}
return jScrollPane3;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(64, 109, 174, 25));
jButton.setText("Send RSA Public Key");
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
try{
Socket s = new Socket(InetAddress.getByName(IP),2004);
ObjectOutputStream objout = new ObjectOutputStream(s.getOutputStream());
objout.writeObject(rsa.getPublicKey());
objout.flush();
}catch(Exception ex){
ex.printStackTrace();
}
}
});
}
return jButton;
}
/**
* @param args
*/
/////////////////////////////////////////////线程区
private void ConnectListen()
{
new Thread(new Runnable(){
public void run(){
ServerSocket ss=null;
try{
ss=new ServerSocket(2000);
}catch(Exception e){
e.printStackTrace();
}
while(1==1){
try {
Socket s=ss.accept();
IP=s.getInetAddress().getHostAddress();
appendJTextArea1(IP + "has been connected!\n");
}catch(Exception e){
e.printStackTrace();
}
}
}
}).start();
}
private void RecDesKey(){
new Thread(new Runnable(){
public void run(){
ServerSocket ss=null;
try{
ss=new ServerSocket(2001);
}catch(Exception e){
e.printStackTrace();
}
while(1==1){
try{
Socket s = ss.accept();
ObjectInputStream objIn = new ObjectInputStream(s.getInputStream());
byte[] rev = new byte[8192];
int k = 0;
k = objIn.read(rev);//K为读到的字节数,因为8192已经足够一次读完,因此不用循环地读
revDes = new byte[k];
for(int j = 0;j<k; j++){
revDes[j] = rev[j];
}
appendJTextArea(new String(revDes));
}catch(Exception e){
e.printStackTrace();
}
}
}
}).start();
}
private void RecMessage(){
new Thread(new Runnable(){
public void run(){
ServerSocket ss=null;
try{
ss=new ServerSocket(2003);
}catch(Exception e){
e.printStackTrace();
}
while(1==1){
try{
Socket s = ss.accept();
ObjectInputStream objIn = new ObjectInputStream(s.getInputStream());
int messageSize = objIn.readInt();
byte[] messageByte= new byte[messageSize];
objIn.readFully(messageByte);
int signLength = objIn.readInt();
byte[] signByte= new byte[signLength];
objIn.readFully(signByte);
byte[] messageAfterDes = des.decrpty(messageByte);
byte[] signAfterDes = des.decrpty(signByte);
MD5withRSA.setPublicKey(getPublicKey());
if (MD5withRSA.verify(messageAfterDes, signAfterDes))
appendJTextArea1("authentication is successful!!!\n");
else appendJTextArea1("authentication is fail!!!\n");
appendJTextArea1(s.getInetAddress() + ":\n" +
new String(messageAfterDes) + "\n");
}catch(Exception e){
e.printStackTrace();
}
}
}
}).start();
}
private void RecPublicKey(){
new Thread(new Runnable(){
public void run(){
ServerSocket ss=null;
try{
ss=new ServerSocket(2002);
}catch(Exception e){
e.printStackTrace();
}
while(1==1){
try{
Socket s = ss.accept();
ObjectInputStream objIn= new ObjectInputStream(s.getInputStream());
PublicKey key = (PublicKey)objIn.readObject();
setPublicKey(key);
appendJTextArea4(key.toString());
objIn.close();
s.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}).start();
}
/**
* This method initializes jButton1
*
* @return javax.swing.JButton
*/
private JButton getJButton1() {
if (jButton1 == null) {
jButton1 = new JButton();
jButton1.setBounds(new Rectangle(59, 213, 1, 19));
}
return jButton1;
}
/**
* This method initializes jButton2
*
* @return javax.swing.JButton
*/
private JButton getJButton2() {
if (jButton2 == null) {
jButton2 = new JButton();
jButton2.setBounds(new Rectangle(83, 145, 140, 25));
jButton2.setText("Decrypte");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
Key key = rsa.unwrapkey(revDes);
des.setSecretKey((SecretKey)key);
appendJTextArea3(key.toString());
}
});
}
return jButton2;
}
/////////////////////////////////////////////////////////
public static void main(String[] args) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame thisClass = new RecNode();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
/**
* This is the default constructor
*/
public RecNode() {
super();
initialize();
ConnectListen();
RecDesKey();
RecPublicKey();
RecMessage();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(322, 419);
this.setContentPane(getJContentPane());
this.setTitle("Receiver");
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJPanel(), null);
jContentPane.add(getJPanel1(), null);
}
return jContentPane;
}
} // @jve:decl-index=0:visual-constraint="10,10"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -