zoukankan      html  css  js  c++  java
  • 仿射密码加密解密 (输入字母数值)

     1  import java.util.*;
     2  public class FangSheMiMa{
     3      public static void main (String args[]){           
     4              System.out.println("请依次输入k1,k2,字母数值");             
     5              Scanner scan=new Scanner (System .in);
     6              int k1=scan.nextInt();
     7              int k2=scan.nextInt();
     8              int letter=scan.nextInt();
     9                        
    10             if (gcd(k1,26)!=1){
    11                 System.out.println("输入的密匙不符合要求!");
    12             }
    13             else{ 
    14                      System .out.println("请选择操作");
    15                      System .out.println("1:加密 ");
    16                      System .out.println("2:解密 ");                      
    17                      int t=scan.nextInt();
    18                      switch (t ){
    19                      case 1: 
    20                          System .out.println("明文:"+ letter+"   "+jiaMi(letter,k1,k2));
    21                          System .out.println("          ");
    22                          break;
    23                      case 2:                  
    24                          System .out.println("密文:"+letter+"   "+jieMi(letter,k1,k2));
    25                          System .out.println("          ");
    26                          break;
    27                                    
    28                      }
    29             }
    30         }
    31     /* }*/
    32 
    33  
    34      private static int gcd(int k1, int n) {//  gcd(k1,n)=1为仿射密码具有可逆性的条件
    35             // TODO Auto-generated method stub
    36             int k=0;//
    37             do{
    38                 k=k1%n;
    39                 k1=n;
    40                 n=k;
    41             }while(k!=0);
    42                 return k1;             
    43         }  
    44      //辗转消除求最大公约数
    45      private static int ni(int k1,int n){
    46          int i=1;
    47          while(k1*i%n!=1){
    48              i++;
    49          }
    50         return i;
    51      }
    52      
    53     //加密算法
    54         private static String jiaMi(int plainText, int k1, int k2) {
    55             // TODO Auto-generated method stub
    56             //String PlainText="";
    57             int encryperText=0;        
    58             encryperText=(k1*plainText+k2)%26;                        
    59             String result ="密匙:<"+k1+","+k2+">  "+"   密文:"+encryperText;         
    60             return result;
    61         }
    62      
    63      
    64      
    65 //解密算法
    66     private static String jieMi(int encrypherText, int k1, int k2) {
    67         // TODO Auto-generated method stub
    68         int PlainText=0;
    69         String result="";
    70         
    71          // k3(m-t)%26=c
    72         PlainText=(ni(k1,26)*(encrypherText-k2))%26;              
    73          result ="密匙:<"+k1+","+k2+">  "+"   明文:"+PlainText;         
    74         return result;
    75         
    76     }
    77   }

    88888888888888888888888888888
  • 相关阅读:
    HTML
    JavaScript事件对象
    JavaScript 事件入门
    如何向github上传文件
    crystal
    BUUCTF[强网杯 2019]随便注wp
    BUUCTF[CISCN2019 华东南赛区]Web4 wp
    BUUCTF[NPUCTF2020]ezinclude wp
    Windows下Ant的环境配置
    Java解惑(1)——表达式之谜
  • 原文地址:https://www.cnblogs.com/lql547485426/p/6534783.html
Copyright © 2011-2022 走看看