⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rsaframe.java

📁 RSA算法的Java实现
💻 JAVA
字号:
package com.lzh.rsa;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigInteger;
import java.util.Date;
import java.util.Random;
import java.util.StringTokenizer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class RSAFrame implements ActionListener {

	private JLabel time2;
	private JTextArea sendM;
	private JScrollPane panelSendM;
	private JTextArea decode;
	private JScrollPane panelDecode;
	private JTextArea encondSm;
	private JScrollPane panelEncondSm;
	private JTextField setD;
	private JTextField setE;
	private JTextField setN;
	private JTextField setQ;
	private JTextField setP;
	private JTextField numBits;
	private JFrame frame;
	private JButton b1, b2, b3;
	private RSA rsa = new RSA();
	private BigInteger p, q, e, n, d, ran;
	private Random rnd = new Random();
	private int numBit = 10;
	private long t1 , t2, t;
	private JLabel time;
	
	public void setMessage() {
		p = rsa.getPrimes(rnd);
		q = rsa.getPrimes(rnd);
		n = rsa.getN(p, q);
		ran = rsa.getRan(p, q);
		e = rsa.getE(ran);
		d = rsa.getKey(e,ran);
		
		setP.setText(p + "");
		setQ.setText(q + "");
		setN.setText(n + "");
		setE.setText(e + "");
		setD.setText(d + "");
	}
	
	public int getNumBits() {
		numBit = Integer.parseInt(numBits.getText());
		if(numBit<9)
			   JOptionPane.showMessageDialog(null, "请输入大于的整数");
		else rsa.getNumBit(numBit);
		return numBit;
	}
	
	public void actionPerformed(ActionEvent evt) {
		if(evt.getSource() == b1) {
			this.getNumBits();
			this.setMessage();
		} 
		
		if(evt.getSource() == b2) {
			t1 = System.currentTimeMillis();
			    byte[] arraySendM = sendM.getText().getBytes();
		        int numeroByte = (this.getNumBits()-1) / 8;   
		        byte[][] encodSendM = RSA.byteToEm(arraySendM,numeroByte);
		        BigInteger[] encodingM = RSA.encodeRSA(encodSendM, e, n);	        
		        encondSm.setText(""); 
		        int i; 
		        for (i=0; i < encodingM.length; i++) {
		        	encondSm.append(encodingM[i].toString());
		        	encondSm.append("  "); 
		        }
		        t2 = System.currentTimeMillis();
		        t = t2 - t1;
		        time.setText(t + "毫秒");
		    }
		
		if(evt.getSource() == b3) {
			try {
				t1 = System.currentTimeMillis();
	            String encondM = encondSm.getText();
	            /*分隔符字符用来分隔标记。标记是连续字符(不是分隔符)的最大序列*/
	            StringTokenizer StringEncM = new StringTokenizer(encondM, " ", false);
	            /*计算在生成异常之前可以调用此 tokenizer 的 nextToken 方法的次数*/
	            int numeroToken = StringEncM.countTokens();
	            BigInteger[] StringToByte = new BigInteger[numeroToken];
	            byte[] sendMessage;      
	            byte[][] encodeM;

	            for (int i = 0; i < numeroToken; i++) {
	            	/*返回此 string tokenizer 的字符串中的下一个标记*/
	                StringToByte[i] = new BigInteger(StringEncM.nextToken());
	            }
	            
	            encodeM = RSA.dencodeRSA(StringToByte, d, n);
	            
	            sendMessage = RSA.StringToByte(encodeM);
	            
	            String message = new String(sendMessage);
	            decode.setText(message);
	            t2 = System.currentTimeMillis();
	            t = t2 - t1;   
		        time2.setText(t + "毫秒");

	        }
	        catch(NumberFormatException e) {
	            JOptionPane.showMessageDialog(null, 
	            		"过大系统越界", 
	            		"Errore", JOptionPane.ERROR_MESSAGE);
	        }
		}
	}
	
	/**
	 * Launch the application
	 * @param args
	 */
	public static void main(String args[]) {
		try {
			RSAFrame rf = new RSAFrame();
			rf.launchFrame();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the application
	 */
	public RSAFrame() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame
	 */
	private void initialize() {
		frame = new JFrame();
		frame.getContentPane().setLayout(null);
		frame.setBounds(100, 100, 594, 511);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		panelSendM = new JScrollPane();
		panelSendM.setBounds(10, 224, 525, 39);
		frame.getContentPane().add(panelSendM);

	}
	
	public void launchFrame() {
		final JLabel label = new JLabel();
		label.setText("请你输入生成随机数的位数:");
		label.setBounds(10, 10, 165, 15);
		frame.getContentPane().add(label);

		b1 = new JButton();
		b1.setText("生成随数");
		b1.setBounds(383, 6, 99, 23);
		frame.getContentPane().add(b1);

		numBits = new JTextField();
		numBits.setBounds(181, 7, 181, 21);
		frame.getContentPane().add(numBits);

		final JLabel labelp = new JLabel();
		labelp.setText("随机数    P:");
		labelp.setBounds(10, 34, 73, 15);
		frame.getContentPane().add(labelp);

		setP = new JTextField();
		setP.setBounds(100, 31, 382, 21);
		frame.getContentPane().add(setP);

		final JLabel labelq = new JLabel();
		labelq.setText("随机数    Q:");
		labelq.setBounds(10, 61, 73, 15);
		frame.getContentPane().add(labelq);

		setQ = new JTextField();
		setQ.setBounds(100, 58, 382, 21);
		frame.getContentPane().add(setQ);

		final JLabel nPqLabel = new JLabel();
		nPqLabel.setText("  N = P*Q:");
		nPqLabel.setBounds(10, 94, 73, 15);
		frame.getContentPane().add(nPqLabel);

		setN = new JTextField();
		setN.setBounds(100, 91, 382, 21);
		frame.getContentPane().add(setN);

		final JLabel nPqLabel_1 = new JLabel();
		nPqLabel_1.setText("随机整数  e:");
		nPqLabel_1.setBounds(10, 125, 73, 15);
		frame.getContentPane().add(nPqLabel_1);

		final JLabel nPqLabel_2 = new JLabel();
		nPqLabel_2.setText("密钥      d:");
		nPqLabel_2.setBounds(10, 157, 73, 15);
		frame.getContentPane().add(nPqLabel_2);

		setE = new JTextField();
		setE.setBounds(100, 122, 382, 21);
		frame.getContentPane().add(setE);

		setD = new JTextField();
		setD.setBounds(100, 154, 382, 21);
		frame.getContentPane().add(setD);

		final JLabel label_1 = new JLabel();
		label_1.setText("要发送的明文     M:");
		label_1.setBounds(10, 198, 117, 15);
		frame.getContentPane().add(label_1);

		b2 = new JButton();
		b2.setText("加密明文");
		b2.setBounds(10, 269, 99, 23);
		frame.getContentPane().add(b2);

		panelEncondSm = new JScrollPane();
		panelEncondSm.setBounds(10, 302, 525, 39);
		frame.getContentPane().add(panelEncondSm);

		encondSm = new JTextArea();
		encondSm.setRows(4);
		encondSm.setLineWrap(true);
		encondSm.setColumns(50);
		panelEncondSm.setViewportView(encondSm);

		b3 = new JButton();
		b3.setText("解密");
		b3.setBounds(10, 348, 99, 23);
		frame.getContentPane().add(b3);

		panelDecode = new JScrollPane();
		panelDecode.setBounds(10, 377, 525, 39);
		frame.getContentPane().add(panelDecode);

		decode = new JTextArea();
		panelDecode.setViewportView(decode);
		decode.setRows(4);
		decode.setLineWrap(true);
		decode.setColumns(50);
		
		sendM = new JTextArea();
		sendM.setRows(4);
		sendM.setLineWrap(true);
		sendM.setColumns(50);
		panelSendM.setViewportView(sendM);
		
		b1.addActionListener(this);
		b2.addActionListener(this);
		b3.addActionListener(this);
		
		final JLabel label1 = new JLabel();
		label1.setText("加密所需时间:");
		label1.setBounds(10, 434, 99, 15);
		frame.getContentPane().add(label1);

		time = new JLabel();
		time.setBounds(120, 434, 117, 15);
		frame.getContentPane().add(time);
		
		final JLabel label2 = new JLabel();
		label2.setText("解密所需时间:");
		label2.setBounds(281, 434, 99, 15);
		frame.getContentPane().add(label2);

		time2 = new JLabel();
		time2.setBounds(383, 434, 117, 15);
		frame.getContentPane().add(time2);
		frame.setVisible(true);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -