📄 mainframe.java
字号:
package cn.com.rsa;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
import javax.swing.JButton;
public class MainFrame extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JLabel jLabel = null;
private JTextField jTextField = null;
private JLabel jLabel1 = null;
private JTextField jTextField1 = null;
private JLabel jLabel2 = null;
private JTextField jTextField2 = null;
private JLabel jLabel3 = null;
private JTextField jTextField3 = null;
private JLabel jLabel4 = null;
private JTextField jTextField4 = null;
private JLabel jLabel5 = null;
private JButton jButton = null;
private JTextField jTextField5 = null;
private JButton jButton1 = null;
private JLabel jLabel6 = null;
private JTextField jTextField6 = null;
private JButton jButton2 = null;
private JLabel jLabel7 = null;
private JTextField jTextField7 = null;
private JButton jButton3 = null;
private JLabel jLabel8 = null;
private JTextField jTextField8 = null;
private int p = 0;
private int q = 0;
private long n = 0;
private long m = 0;
private long public_key = 0; //公匙
private long private_key = 0; //密匙
private long text = 0; //明文
private long secretword = 0; //密文
private long word = 0; //解密后明文
/**
* This is the default constructor
*/
public MainFrame() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(500, 315);
this.setContentPane(getJContentPane());
this.setTitle("RSA算法演示");
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabel8 = new JLabel();
jLabel8.setBounds(new Rectangle(15, 239, 104, 30));
jLabel8.setText("解密后所得明文:");
jLabel7 = new JLabel();
jLabel7.setBounds(new Rectangle(15, 195, 80, 30));
jLabel7.setText("加密后密文:");
jLabel6 = new JLabel();
jLabel6.setBounds(new Rectangle(15, 151, 80, 30));
jLabel6.setText("请输入明文:");
jLabel5 = new JLabel();
jLabel5.setBounds(new Rectangle(184, 105, 80, 30));
jLabel5.setText("得到密钥 D :");
jLabel4 = new JLabel();
jLabel4.setBounds(new Rectangle(15, 105, 93, 30));
jLabel4.setText("请输入公钥 E :");
jLabel3 = new JLabel();
jLabel3.setBounds(new Rectangle(193, 61, 38, 30));
jLabel3.setText(" ф:");
jLabel2 = new JLabel();
jLabel2.setBounds(new Rectangle(15, 61, 61, 30));
jLabel2.setText("模数 N :");
jLabel1 = new JLabel();
jLabel1.setBounds(new Rectangle(233, 15, 26, 30));
jLabel1.setText(" Q");
jLabel = new JLabel();
jLabel.setBounds(new Rectangle(15, 15, 126, 30));
jLabel.setText("请输入两个素数: P");
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(jLabel, null);
jContentPane.add(getJTextField(), null);
jContentPane.add(jLabel1, null);
jContentPane.add(getJTextField1(), null);
jContentPane.add(jLabel2, null);
jContentPane.add(getJTextField2(), null);
jContentPane.add(jLabel3, null);
jContentPane.add(getJTextField3(), null);
jContentPane.add(jLabel4, null);
jContentPane.add(getJTextField4(), null);
jContentPane.add(jLabel5, null);
jContentPane.add(getJButton(), null);
jContentPane.add(getJTextField5(), null);
jContentPane.add(getJButton1(), null);
jContentPane.add(jLabel6, null);
jContentPane.add(getJTextField6(), null);
jContentPane.add(getJButton2(), null);
jContentPane.add(jLabel7, null);
jContentPane.add(getJTextField7(), null);
jContentPane.add(getJButton3(), null);
jContentPane.add(jLabel8, null);
jContentPane.add(getJTextField8(), null);
}
return jContentPane;
}
/**
* This method initializes jTextField
*
* @return javax.swing.JTextField
*/
public JTextField getJTextField() {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.setBounds(new Rectangle(145, 15, 80, 30));
}
return jTextField;
}
/**
* This method initializes jTextField1
*
* @return javax.swing.JTextField
*/
public JTextField getJTextField1() {
if (jTextField1 == null) {
jTextField1 = new JTextField();
jTextField1.setBounds(new Rectangle(264, 15, 80, 30));
}
return jTextField1;
}
/**
* This method initializes jTextField2
*
* @return javax.swing.JTextField
*/
public JTextField getJTextField2() {
if (jTextField2 == null) {
jTextField2 = new JTextField();
jTextField2.setBounds(new Rectangle(78, 61, 103, 30));
}
return jTextField2;
}
/**
* This method initializes jTextField3
*
* @return javax.swing.JTextField
*/
public JTextField getJTextField3() {
if (jTextField3 == null) {
jTextField3 = new JTextField();
jTextField3.setBounds(new Rectangle(235, 61, 111, 30));
}
return jTextField3;
}
/**
* This method initializes jTextField4
*
* @return javax.swing.JTextField
*/
public JTextField getJTextField4() {
if (jTextField4 == null) {
jTextField4 = new JTextField();
jTextField4.setBounds(new Rectangle(111, 106, 70, 30));
}
return jTextField4;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
public JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(358, 61, 107, 30));
jButton.setText("计算 N 和 ф");
jButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
do{
String br1 = jTextField.getText();
p = Integer.parseInt(br1);
String br2 = jTextField1.getText();
q = Integer.parseInt(br2);
}while(!primenumber(p) && !primenumber(q));
n = (long)p * q;
m = (long)(p - 1) * (q - 1);
jTextField2.setText(String.valueOf(n));
jTextField3.setText(String.valueOf(m));
}
});
}
return jButton;
}
/**
* This method initializes jTextField5
*
* @return javax.swing.JTextField
*/
public JTextField getJTextField5() {
if (jTextField5 == null) {
jTextField5 = new JTextField();
jTextField5.setBounds(new Rectangle(265, 106, 82, 30));
}
return jTextField5;
}
/**
* This method initializes jButton1
*
* @return javax.swing.JButton
*/
private JButton getJButton1() {
if (jButton1 == null) {
jButton1 = new JButton();
jButton1.setBounds(new Rectangle(360, 106, 105, 30));
jButton1.setText("计算密钥 D");
jButton1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if((public_key >= m) || (gcd(m,public_key)!=1)){
String br = jTextField4.getText();
public_key = Long.parseLong(br);
long value = 1;
outer:
for(long i=1;;i++){
value = i * m + 1;
if((value % public_key == 0) && (value / public_key < m)){
private_key = value / public_key;
break outer;
}
}
jTextField5.setText(String.valueOf(private_key));
}
}
});
}
return jButton1;
}
/**
* This method initializes jTextField6
*
* @return javax.swing.JTextField
*/
public JTextField getJTextField6() {
if (jTextField6 == null) {
jTextField6 = new JTextField();
jTextField6.setBounds(new Rectangle(99, 150, 249, 30));
}
return jTextField6;
}
/**
* This method initializes jButton2
*
* @return javax.swing.JButton
*/
private JButton getJButton2() {
if (jButton2 == null) {
jButton2 = new JButton();
jButton2.setBounds(new Rectangle(360, 150, 105, 30));
jButton2.setText("加 密");
jButton2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String br1 = jTextField6.getText();
text = Long.parseLong(br1);
String br2 = jTextField2.getText();
n = Long.parseLong(br2);
String br3 = jTextField4.getText();
public_key = Long.parseLong(br3);
secretword = colum(text, n, public_key);
jTextField7.setText(String.valueOf(secretword));
}
});
}
return jButton2;
}
/**
* This method initializes jTextField7
*
* @return javax.swing.JTextField
*/
public JTextField getJTextField7() {
if (jTextField7 == null) {
jTextField7 = new JTextField();
jTextField7.setBounds(new Rectangle(99, 195, 247, 30));
}
return jTextField7;
}
/**
* This method initializes jButton3
*
* @return javax.swing.JButton
*/
private JButton getJButton3() {
if (jButton3 == null) {
jButton3 = new JButton();
jButton3.setBounds(new Rectangle(360, 196, 106, 30));
jButton3.setText("解 密");
jButton3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String br1 = jTextField7.getText();
secretword = Long.parseLong(br1);
String br2 = jTextField2.getText();
n = Long.parseLong(br2);
String br3 = jTextField5.getText();
private_key = Long.parseLong(br3);
word = colum(secretword, n, private_key);
jTextField8.setText(String.valueOf(word));
}
});
}
return jButton3;
}
/**
* This method initializes jTextField8
*
* @return javax.swing.JTextField
*/
public JTextField getJTextField8() {
if (jTextField8 == null) {
jTextField8 = new JTextField();
jTextField8.setBounds(new Rectangle(126, 238, 220, 30));
}
return jTextField8;
}
//判断是否为素数
public static boolean primenumber(long t){
long k = 0;
k = (long)Math.sqrt((double)t);
boolean flag = true;
outer:
for(int i =2; i <= k; i ++){
if((t % 2) == 0){
flag = false;
break outer;
}
}
return flag;
}
//求最大公约数
public long gcd(long a,long b)
{
long gcd;
if(b == 0){
gcd = a;
}else{
gcd = gcd(b, a % b);
}
return gcd;
}
//加密、解密计算
public long colum(long y,long n,long key)
{
long mul;
if(key == 1){
mul = y % n;
}else{
mul = y * colum(y, n, key - 1) % n;
}
return mul;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -