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

📄 shareframe.java

📁 Shamir秘密分享算法的java实现
💻 JAVA
字号:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JToggleButton;

public class ShareFrame extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	ShareSec ss=new ShareSec();
	BigInteger primeP;
	
    public ShareFrame() {
        try {
            jbInit();
        } catch (Exception ex) {
            ex.printStackTrace(); 
        }
    }

    public static void main(String[] args) {
        ShareFrame shareframe = new ShareFrame();
        shareframe.setVisible(true);
    }

    private void jbInit() throws Exception {
        this.setSize(480,380);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        jTextField1.setAlignmentY((float) 20.0);
        jPanel6.setLayout(flowLayout2);
        jPanel6.setBorder(null);
        jLabel3.setAlignmentX((float) 3.0);
        jPanel3.setLayout(borderLayout4);
        jButton1.setText("生成子密钥");
        jButton1.addActionListener(new java.awt.event.ActionListener(){
    		public void actionPerformed(ActionEvent e){
    			jButton1_actionPerformed(e);
    		}});
        
        jPanel2.setLayout(borderLayout2);
        jLabel1.setText("门限 ");
        jLabel2.setText("   密钥对 ");
        jTextField2.setPreferredSize(new Dimension(40, 21));
        jTextField2.setText("");
        jLabel3.setText("   密钥 ");
        jTextField3.setPreferredSize(new Dimension(210, 21));
        jTextField3.setText("");
        jTextField1.setPreferredSize(new Dimension(40, 21));

        jPanel3.setPreferredSize(new Dimension(420, 25));
       
        jPanel5.setPreferredSize(new Dimension(420, 200));
        jPanel5.setLayout(borderLayout1);
        jList1.setBorder(BorderFactory.createLoweredBevelBorder());
        jList2.setBorder(BorderFactory.createLoweredBevelBorder());
        
        jPanel9.setLayout(borderLayoutButton);
        jButton2.setPreferredSize(new Dimension(20, 20));
        jButton2.setText(">");
        jButton2.addActionListener(
        		new java.awt.event.ActionListener(){
            		public void actionPerformed(ActionEvent e){
            			
            			jButton2_actionPerformed(e);   
            		}});
        jButton3.setPreferredSize(new Dimension(20, 20));
        jButton3.setToolTipText("");
        jButton3.setText("<");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(ActionEvent e) {
				jButton3_actionPerformed(e);
			}});
        jPanel1.setPreferredSize(new Dimension(500, 540));
        jPanel4.setPreferredSize(new Dimension(320, 50));
        jLabel4.setText("密钥");
        jToggleButton1.setText("解密");
        jToggleButton1.addActionListener(new java.awt.event.ActionListener(){
    		public void actionPerformed(ActionEvent e){
    			
    			jToggleButton1_actionPerformed(e);   
    		}});
        jTextField5.setPreferredSize(new Dimension(200, 21));
        jTextField4.setPreferredSize(new Dimension(320, 21));
        jPanel6.add(jLabel1, null);
        jPanel6.add(jTextField1);
        jPanel6.add(jLabel2, null);
        jPanel6.add(jTextField2, null);
        jPanel6.add(jLabel3, null);
        jPanel6.add(jTextField3, null);
        jPanel1.add(jPanel2, null);
        jPanel2.add(jPanel6, java.awt.BorderLayout.CENTER);
        
        jPanel3.add(jTextField4, java.awt.BorderLayout.CENTER);
        jPanel3.add(jButton1, java.awt.BorderLayout.EAST);
        jPanel1.add(jPanel3, null);
      
        jPanel4.add(jLabel4);
        jPanel4.add(jTextField5);
        jPanel4.add(jToggleButton1);
        jPanel1.add(jPanel7, null);
        jPanel1.add(jPanel8);
        this.getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
        
        sPanel1.getViewport().add(jList1,null); 
        sPanel1.setPreferredSize(new Dimension(180, 200));
       
         
        jPanel5.add(sPanel1, BorderLayout.WEST);
        sPanel2.getViewport().add(jList2,null);
         sPanel2.setPreferredSize(new Dimension(180, 200));
          jPanel5.add(sPanel2, BorderLayout.EAST);
    
        jButton2.setPreferredSize(new Dimension(50, 40));
        jPanelButton1.add(jButton2);
        jPanelButton1.setPreferredSize(new Dimension(50,40));
        jPanel9.add(jPanelButton1,BorderLayout.NORTH);
        jButton3.setPreferredSize(new Dimension(50, 40));
        jPanelButton2.add(jButton3);
        jPanelButton2.setPreferredSize(new Dimension(50, 40));
        jPanel9.add(jPanelButton2,BorderLayout.SOUTH);
        jPanel5.add(jPanel9, BorderLayout.CENTER);
       
        
        jPanel1.add(jPanel5, null);
        jPanel1.add(jPanel4, null);
        jPanel1.setLayout(flowLayout1);
    }

    JPanel jPanel1 = new JPanel();
    JPanel jPanel2 = new JPanel();
    JPanel jPanel3 = new JPanel();
    JPanel jPanel4 = new JPanel();
    JPanel jPanel5 = new JPanel();
    JLabel jLabel1 = new JLabel();
    JTextField jTextField1 = new JTextField();//门限
    JLabel jLabel2 = new JLabel();
    JTextField jTextField2 = new JTextField();//密钥数
    JLabel jLabel3 = new JLabel();
    JTextField jTextField3 = new JTextField(); //密钥
    BorderLayout borderLayout2 = new BorderLayout();
    JPanel jPanel6 = new JPanel();
    JPanel jPanel7 = new JPanel();
    JPanel jPanel8 = new JPanel();
    BorderLayout borderLayout4 = new BorderLayout();
    JTextField jTextField4 = new JTextField(); //多项式
    JButton jButton1 = new JButton();
    FlowLayout flowLayout1 = new FlowLayout();
    BorderLayout borderLayout1 = new BorderLayout();
    
    DefaultListModel model1 = new DefaultListModel();
    JList jList1 = new JList(model1);
    JScrollPane sPanel1=new JScrollPane();
    JPanel jPanelButton1=new JPanel();
    DefaultListModel model2 = new DefaultListModel();    
    JList jList2 = new JList(model2);
    JScrollPane sPanel2=new JScrollPane();
    JPanel jPanelButton2=new JPanel();
    
    JPanel jPanel9 = new JPanel();
    BorderLayout borderLayoutButton = new BorderLayout();
    JButton jButton2 = new JButton();
    JButton jButton3 = new JButton();
    JLabel jLabel4 = new JLabel();
    JTextField jTextField5 = new JTextField();
    JToggleButton jToggleButton1 = new JToggleButton();
    FlowLayout flowLayout2 = new FlowLayout();
    JPanel jPanel10 = new JPanel();
    
    public void jButton1_actionPerformed(ActionEvent e) {
    	int ipieces=Integer.valueOf(jTextField1.getText());
    	BigInteger secValue = new BigInteger(jTextField3.getText());
    	Polynomial poly = ss.initPoly(ipieces,secValue);
		primeP = ss.getP();
		jTextField4.setText(poly.toString());
		
		String stmp;
    	String stmpX,stmpY;
    	int iKeys;
    	iKeys = Integer.valueOf(jTextField2.getText());
    	model1.clear();
    	model2.clear();
    	BigInteger bi;
    	Random rand = new Random(500);
    	for(int itmp=1;itmp<=iKeys;itmp++){
    		bi = new BigInteger(ShareSec.maxXLength, rand);
    		//bi = new BigInteger(Integer.toString(itmp));    		
    		stmpX = bi.toString();
    		stmpY = poly.getCalValue(bi).toString();
    		stmp = stmpX + "," + stmpY;
			model1.addElement(stmp);
			System.out.println(stmp);
		}
    	
    }

    public void jButton2_actionPerformed(ActionEvent e) { //>
    	Object[] selected=jList1.getSelectedValues();
    	
    	for (Object value : selected){
    		model1.removeElement(value);
    		model2.addElement(value);
    	}    	
    }

    public void jButton3_actionPerformed(ActionEvent e) { //<
    	Object[] selected=jList2.getSelectedValues();
    
    	for (Object value : selected){
    		model2.removeElement(value);
    		model1.addElement(value);
    	}
    	
    }

    public void jToggleButton1_actionPerformed(ActionEvent e) { //解密
    	Map<BigInteger,BigDecimal> testMap = new HashMap<BigInteger,BigDecimal>();
    	BigInteger bi;
    	String stmp;
    	String stmpX,stmpY;
    	for(int itmp=0;itmp<model2.size();itmp++){
    		stmp = (String)model2.get(itmp);
    		stmpX = stmp.substring(0,stmp.indexOf(","));
			stmpY = stmp.substring(stmp.indexOf(",")+1,stmp.length());
    		bi = new BigInteger(stmpX);			
			testMap.put(bi, new BigDecimal(stmpY));
		}
    	ShareSec ss = new ShareSec();
		jTextField5.setText(ss.getPolynomialValue(testMap).toString());
    }
}

⌨️ 快捷键说明

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