暗号化、復号アルゴリズムの置き換え

10888 ワード

暗号解読アルゴリズムの代替案の起源はシーザー時代にさかのぼり、シーザーは情報の信頼性を保障するためにシーザー暗号を発明したという.シーザーパスワードは簡単な置換パスワードであり、暗号化時にアルファベット表の各アルファベットはその後の3番目のアルファベットで表され、例えばaはdで表され、bはeで表される.......復号化には,逆プロシージャを実行するだけでよい.
1.暗号化・復号アルゴリズムの置き換え
この歴史の発展に伴い、代替暗号アルゴリズム案はすでに多くの形式を持っており、主に以下のいくつかがある.
  • 単表代替暗号アルゴリズムスキーム
  • 同音代替暗号アルゴリズムスキーム
  • マルチテーブル代替暗号アルゴリズムスキーム
  • マルチアルファベットグループ代替暗号アルゴリズムスキーム
  • 以下では,暗号アルゴリズムの代わりに単一テーブルを用いるスキームを例に紹介する.
    1)暗号化アルゴリズムの置き換え
    暗号化アルゴリズムを置換する基本的な方法は、まず、明文の各文字に対応するASCIIコードがnを後方に移動して対応する暗号文を得る鍵nを与えることである.
    この考え方に従って、対応する暗号化アルゴリズムを作成します.コードの例は次のとおりです.
        /**
    
         *     
    
         * @param str      
    
         * @param n         ASCII        ,   
    
         * @return
    
         */
    
        static char[] jiami(char[] str,int n){
    
            int i,len;
    
            char[] miwen;
    
            len=str.length;
    
            miwen=new char[len];    //    
    
            for(i=0;i<len;i++){
    
                miwen[i]=(char)(str[i]+n);
    
            }
    
            return miwen;
    
        }

    2)置換復号アルゴリズム
    復号アルゴリズムを置換する基本的な方法は、暗号化時の鍵と一致しなければならない鍵nを最初に与え、対応する暗号文の各文字のASCIIコードがnを前方に移動して対応する明文を得ることである.
    この考え方に従って、対応する暗号化アルゴリズムを作成します.コードの例は次のとおりです.
        /**
    
         *     
    
         * @param miwen      
    
         * @param n         ASCII        ,              
    
         * @return
    
         */
    
        static char[] jiemi(char[] miwen,int n){
    
            int i,len;
    
            char[] str;
    
            len=miwen.length;
    
            str=new char[len];    //    
    
            for(i=0;i<len;i++){
    
                str[i]=(char)(miwen[i]-n);
    
            }
    
            return str;
    
        }

    2.暗号化・復号アルゴリズムの例を置換する
    完全なプログラムコードの例は次のとおりです.
    package com.cn.mimaxue;
    
    
    
    import java.io.BufferedReader;
    
    import java.io.IOException;
    
    import java.io.InputStreamReader;
    
    import java.util.Scanner;
    
    
    
    //        
    
    public class THJMJM {
    
        /**
    
         *     
    
         * @param str      
    
         * @param n         ASCII        ,   
    
         * @return
    
         */
    
        static char[] jiami(char[] str,int n){
    
            int i,len;
    
            char[] miwen;
    
            len=str.length;
    
            miwen=new char[len];    //    
    
            for(i=0;i<len;i++){
    
                miwen[i]=(char)(str[i]+n);
    
            }
    
            return miwen;
    
        }
    
        /**
    
         *     
    
         * @param miwen      
    
         * @param n         ASCII        ,              
    
         * @return
    
         */
    
        static char[] jiemi(char[] miwen,int n){
    
            int i,len;
    
            char[] str;
    
            len=miwen.length;
    
            str=new char[len];    //    
    
            for(i=0;i<len;i++){
    
                str[i]=(char)(miwen[i]-n);
    
            }
    
            return str;
    
        }
    
        public static void main(String[] args) throws IOException {
    
            char[] str,miwen,jiemi;
    
            int n,i;
    
            String go;
    
            System.out.println("          !");
    
            Scanner input = new Scanner(System.in);
    
            do{
    
                System.out.print("              :");
    
                n = input.nextInt();
    
                System.out.print("     :");
    
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
                String strtemp=br.readLine();
    
                str=strtemp.toCharArray();
    
                System.out.print("   :");
    
                for(i=0;i<str.length;i++){
    
                    System.out.print(str[i]);
    
                }
    
                System.out.println();
    
                miwen=jiami(str,n);
    
                System.out.print("   :");
    
                for(i=0;i<miwen.length;i++){
    
                    System.out.print(miwen[i]);
    
                }
    
                System.out.println();
    
                jiemi=jiemi(miwen,n);
    
                System.out.print("   :");
    
                for(i=0;i<jiemi.length;i++){
    
                    System.out.print(jiemi[i]);
    
                }
    
                System.out.println();
    
                System.out.print("    (y/n):");
    
                go = input.next();
    
            }while(go.equalsIgnoreCase("y")); 
    
            System.out.println("    !");
    
    
    
        }
    
    
    
    }

    プログラムの実行結果は次のとおりです.
              !
    
                  :4
    
         :Hello everyone!
    
       :Hello everyone!
    
       :Lipps$iziv}sri%
    
       :Hello everyone!
    
        (y/n):y
    
                  :3
    
         :One world, One dream!
    
       :One world, One dream!
    
       :Rqh#zruog/#Rqh#guhdp$
    
       :One world, One dream!
    
        (y/n):n
    
        !