クラシック暗号アルゴリズム------代替暗号アルゴリズム


代替暗号アルゴリズムの原理は,代替法を用いて暗号化することであり,明文中の文字を他の文字に置き換えて暗号文を形成することである.例えば、明文アルファベットa,b,c,dは、D,E,F,Gに対応して置き換えられて密文となる.代替パスワードには、単一テーブル代替パスワード、マルチコード代替パスワード、マルチアルファベット代替パスワード、マルチテーブル代替パスワードなど、さまざまなタイプがあります.次に、典型的な単一テーブル代替パスワード、カエサル(caesar)パスワード、および循環シフトパスワードを紹介する.その暗号化方法は、明文の各アルファベットをアルファベット表の後ろのk番目のアルファベットに置き換えることです.その暗号化プロセスは、E(m)=(m+k)mod nの関数として表すことができる.ここで、mはアルファベットのアルファベットの位置数である.nはアルファベット表のアルファベット個数である.kは鍵である.E(m)は、アルファベットにおける暗号文字の位置数である.例えば、平文アルファベットHについて、アルファベット表における位置数を8とし、k=4とすると、上記式に従って算出される暗号文はL:E(8)=(m+k)mod n=(8+4)mod 26=12=Lとなる

  
  
  
  
  1. package cn.hdu.edu.encrypt;  
  2.  
  3.  
  4. /*  
  5.  *      
  6.  *   
  7.  */ 
  8. public class Replace {  
  9.  
  10.     // CRYPT_OK, CRYPT_ERROR  
  11.     private final static int CRYPT_OK =     1;    
  12.     private final static int CRYPT_ERROR = 0;  
  13.     // 26    a 97  
  14.     private final static int totalLetter = 26;  
  15.     private final static int key = 3;  
  16.  
  17.     /*  
  18.      * @param initCode   
  19.      * @CRYPT_OK   
  20.      * @CRYPT_ERROR   
  21.      */ 
  22.     public static int encrypt(String initCode)throws Exception{  
  23.     //       
  24.     StringBuilder sb = new StringBuilder();  
  25.     for(int i = 0; i < initCode.length(); i++ ){  
  26.             int initCodeVal = initCode.charAt(i ) - 96;  
  27.             int targetCodeVal = (initCodeVal + key ) % totalLetter;  
  28.             if(targetCodeVal == 0) targetCodeVal = 26;  
  29.             char targetCode =  (char)(targetCodeVal +96);         
  30.             sb.append(targetCode );  
  31.     }  
  32.     //  
  33.     String targetCode = sb.toString();  
  34.     System.out.println(targetCode);  
  35.         return CRYPT_OK;  
  36.     }  
  37.       
  38.     /*  
  39.      * @param targetCode   
  40.      * @CRYPT_OK   
  41.      * @CRYPT_ERROR   
  42.      */ 
  43.     public static int decrypt(String targetCode)throws Exception{  
  44.     //       
  45.     StringBuilder sb = new StringBuilder();  
  46.     for(int i = 0; i < targetCode.length(); i++ ){  
  47.             int targetCodeVal = targetCode.charAt(i ) - 96;  
  48.               
  49.             //      
  50.             if(targetCodeVal <= key)     targetCodeVal += 26;  
  51.                   
  52.             int initCodeVal = targetCodeVal - key;  
  53.             char initCode =  (char)(initCodeVal + 96);  
  54.             sb.append(initCode );  
  55.     }  
  56.     //  
  57.     String initCode = sb.toString();  
  58.     System.out.println(initCode);  
  59.         return CRYPT_OK;  
  60.     }  
  61.       
  62.       
  63.       
  64.       
  65. }