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

📄 encode.java

📁 用Java编写的线性密码加小解密工具
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.*;
import javax.swing.text.*;
import java.util.*;
import java.io.*;

public class encode
{
  private String lineSep;
  private int a;
  private int b;
  private String plainText;
  private String codeText;
  private JFrame mframe;
  private Container mc;
  private JLabel al;
  private JLabel bl;
  private JLabel pexplain;
  private JLabel cexplain;
  private JLabel statisticExplain1;
  private JLabel statisticExplain2;
  private JTextField atxt;
  private JTextField btxt;
  private JTextField plainContainer;
  private JTextField codeContainer;
  private JTextField statisticContainer1;
  private JTextField statisticContainer2;
  JButton submit;
  JButton decode;
  ArrayList<myMap> p;
  ArrayList<myMap> c;
  JTextField caution;
  JLabel cau;




  JPanel j1;
  JPanel j2;
  JPanel j3;
  JPanel j4;
  JPanel j5,j6,j7;
 
  public void show()
  { 
     
      al=new JLabel("parameter a=");
      bl=new JLabel("parameter b=");
      atxt=new JTextField(2);
      btxt=new JTextField(2);
      pexplain=new JLabel("Input the plain text:");
      cexplain=new JLabel("After        encoded:");
      plainContainer=new JTextField(50);
      codeContainer=new JTextField(50);
      submit=new JButton("enCode");
      decode=new JButton("deCode");
      statisticExplain1=new JLabel("plain Statistic:");
      statisticExplain2=new JLabel("code  Statistic:");
      statisticContainer1=new JTextField(50);
      statisticContainer2=new JTextField(50);  
      cau=new JLabel("   message   ");
      caution=new JTextField(50);
      p=new ArrayList<myMap>(26);
      c=new ArrayList<myMap>(26);
      for(int i=0;i<26;i++)
      {
         p.add(new myMap((char)('a'+i),0));
         c.add(new myMap((char)('a'+i),0));
      }
      plainText=null;
      codeText=null;
      a=-1;
      b=-1;
      lineSep=";";
      mframe=new JFrame("CodeHelper");
      mframe.setSize(800,200);
      mframe.setVisible(true);
      mc=mframe.getContentPane();

      j1=new JPanel();
      j2=new JPanel();
      j3=new JPanel();
      j4=new JPanel();
      j5=new JPanel();
      j6=new JPanel();
      j7=new JPanel();

      j1.setLayout(new BoxLayout(j1,BoxLayout.Y_AXIS));
      j1.add(al);
      j1.add(bl);
      mc.add(j1);
      
      j2.setLayout(new BoxLayout(j2,BoxLayout.Y_AXIS));
      j2.add(atxt);
      j2.add(btxt);
      mc.add(j2);
      
      j3.setLayout(new BoxLayout(j3,BoxLayout.Y_AXIS));
      j3.add(pexplain);
      j3.add(cexplain);
      mc.add(j3);
      
      j4.setLayout(new BoxLayout(j4,BoxLayout.Y_AXIS));
      j4.add(plainContainer);
      j4.add(codeContainer);
      mc.add(j4);

      j5.setLayout(new BoxLayout(j5,BoxLayout.Y_AXIS));
      j5.add(statisticExplain1);
      j5.add(statisticExplain2);
      j5.add(cau);
      mc.add(j5);
      
      j6.setLayout(new BoxLayout(j6,BoxLayout.Y_AXIS));
      j6.add(statisticContainer1);
      j6.add(statisticContainer2);
      j6.add(caution);
      mc.add(j6);

      j7.setLayout(new BoxLayout(j7,BoxLayout.Y_AXIS));
      j7.add(submit);
      j7.add(decode);
      mc.add(j7);
      caution.setEditable(false);
      mframe.setLayout(new FlowLayout());
      
   }
   public void addlistener()
   {
       
       
       mframe.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent we){
                 System.exit(0);
            }
        });
       submit.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent sa)
           {
              try{
                  a=Integer.parseInt(atxt.getText());
                  a=(a%26+26)%26;
                  b=Integer.parseInt(btxt.getText());
                  b=(b%26+26)%26;
                  
              }catch(Exception e)
              { 
                 caution.setText(atxt.getText()+" or "+btxt.getText()+"is not number");
                 a=-1;
                 b=-1;
                 atxt.setText("");
                 btxt.setText("");
                 plainContainer.setText("");
                 codeContainer.setText("");
                 statisticContainer1.setText("");
                 statisticContainer2.setText(""); 
                 return;
              }
              if(gcd(a,26)!=1)
              {
                 caution.setText(a+" is not a illegal number!");
                 atxt.setText("");
                 a=-1;
                 plainContainer.setText("");
                 codeContainer.setText("");
                 statisticContainer1.setText("");
                 statisticContainer2.setText("");
                 return; 
              } 
              plainText=plainContainer.getText(); //System.out.println("a:"+plainText);
              if(plainText!=""&&plainText!=null&&a>=0&&b>=0)
               {
                     //System.out.println("a= "+a+"; b= "+b);
                     codeText=transform(a,b,plainText.trim());
                     codeContainer.setText(codeText);
                     StringBuffer ps=new StringBuffer();
                     //ps.append("plainText Statistic:");
                     for(int i=0;i<26;i++)
                     {
                        if(p.get(i).rate!=0)
                        {
                          ps.append(" "+p.get(i).ch+" : "+(double)p.get(i).rate/(plainText.length())+lineSep);
                        }
                        p.get(i).rate=0;
                     }
                     statisticContainer1.setText(ps.toString());
                   
                     ps=new StringBuffer();
                     //ps.append("codeText Statistic:");
                     for(int i=0;i<26;i++)
                     {
                        if(c.get(i).rate!=0)
                        {
                          ps.append(" "+c.get(i).ch+" : "+(double)c.get(i).rate/(plainText.length())+lineSep);
                        }
                        c.get(i).rate=0;
                     }
                     statisticContainer2.setText(ps.toString());
                     caution.setText("work well!");
               }
               else
               {                    
                    caution.setText("error in prameter a or b or plaintext!"); 
                    atxt.setText("");
                    btxt.setText("");        
               }
           }
         });
         decode.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent sa)
           {
              try{
                  a=Integer.parseInt(atxt.getText());
                  a=(a%26+26)%26;
                  b=Integer.parseInt(btxt.getText());
                  b=(b%26+26)%26;
                  
              }catch(Exception e)
              { 
                 caution.setText(atxt.getText()+" or "+btxt.getText()+" is not number");
                 a=-1;
                 b=-1;
                 atxt.setText("");
                 btxt.setText("");
                 plainContainer.setText("");
                 codeContainer.setText("");
                 statisticContainer1.setText("");
                 statisticContainer2.setText(""); 
                 return;
              }
              if(gcd(a,26)!=1)
              {
                 caution.setText(a+" is a illegal number!");
                 atxt.setText("");
                 a=-1;
                 plainContainer.setText("");
                 codeContainer.setText("");
                 statisticContainer1.setText("");
                 statisticContainer2.setText("");
                 return; 
              } 
              codeText=codeContainer.getText(); //System.out.println("b:"+codeText);
              if(codeText!=""&&codeText!=null&&a>=0&&b>=0)
               {
                     //System.out.println("a= "+a+"; b= "+b);
                     plainText=atransform(a,b,codeText.trim());
                     plainContainer.setText(plainText);
                     StringBuffer ps=new StringBuffer();
                     //ps.append("plainText Statistic:");
                     for(int i=0;i<26;i++)
                     {
                        if(p.get(i).rate!=0)
                        {
                          ps.append(" "+p.get(i).ch+" : "+(double)p.get(i).rate/(plainText.length())+lineSep);
                        }
                        p.get(i).rate=0;
                     }
                     statisticContainer1.setText(ps.toString());
                   
                     ps=new StringBuffer();
                     //ps.append("codeText Statistic:");
                     for(int i=0;i<26;i++)
                     {
                        if(c.get(i).rate!=0)
                        {
                          ps.append(" "+c.get(i).ch+" : "+(double)c.get(i).rate/(plainText.length())+lineSep);
                        }
                        c.get(i).rate=0;
                     }
                     statisticContainer2.setText(ps.toString());
                     caution.setText("work well!");
               }
               else
               {                    
                    caution.setText("error in prameter a or b or plaintext!"); 
                    atxt.setText("");
                    btxt.setText("");        
               }
           }
         });
         
   }
   public static void main(String args[])
   {
      encode e=new encode();
      e.show();    
      e.addlistener();
   }
    public String transform(int a,int b,String text)
    {
        int len=text.length();
        
        char buff[]=text.toLowerCase().toCharArray();
        for(int i=0;i<len;i++)
        {
         if(buff[i]>='a'&&buff[i]<='z'){
           p.get(buff[i]-'a').rate+=1;
           buff[i]=(char)(((buff[i]-'a')*a+b)%26+'a');
           c.get(buff[i]-'a').rate+=1;
         }
        }
         return new String(buff);
    }
    public int gcd(int a,int b)
    {
          if(a>=0&&b>=0)
          {
               int r=a%b;
                while(r!=0)
                {
                    a=b;b=r;
                    r=a%b;
                }
                return b;
                
          }
          return -1;
    }
   public String atransform(int a,int b,String text)
   {
       int len=text.length();        
       char buff[]=text.toLowerCase().toCharArray();
       for(int i=0;i<len;i++)
       {
         if(buff[i]>='a'&&buff[i]<='z')
         {
          c.get(buff[i]-'a').rate+=1;
          buff[i]=(char)(((((buff[i]-'a')-b)%26+26)%26*rev(a,26)%26)+'a');
          p.get(buff[i]-'a').rate+=1;
         }
       }
       return new String(buff);
   }
   public int rev(int p,int q)
   {
      if(gcd(p,q)==1)
      {
           int k=1;
           while((q*k+1)%p!=0)
           {
               k++;
           }
           return (q*k+1)/p;
      }
      return -1;
   }
         
    class myMap{
           public myMap(char ch,int rate){
               this.ch=ch;
               this.rate=rate;
           }
           public char ch;
           public int rate;
    }
}   

⌨️ 快捷键说明

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