凱撒加密、解密算法

古羅馬皇帝凱撒在打仗時曾經使用過如下方法加密軍事情報,主要方法就是字母錯位,下面這張圖加密方法就是錯三個位來實現加密功能java

              

(1)  設計思想:數組

  1. 因爲輸入的是一串英文字符,因此咱們用String類來編寫,何況String類有許多方法能夠調用
  2. 錯位須要對每一個字符進行操做,能夠把字符串轉換爲字符數組,調用的是string類的toCharArray方法
  3. 因爲string類也是採用Unicode字符集,因此咱們進行錯位操做時只需讀取一個字符,而後與數字3相加,再轉換爲char類型,就實現了錯3位加密操做,解密則減3.
  4. 在加密操做中,若是加密的是字母表最後三個,則必須實現循環操做,即X加密後是A,Y加密後是B,Z加密後是C,實現這個就要用到ASCII碼,當讀到XYZ時,加密則是減去23後轉換爲char類型,固然,解密時讀到ABC加上23便可

(2)  程序流程圖:加密

                            

(3)  源代碼:spa

package temp;
import java.util.Scanner;
public class Tast2 {
    public static  char[] encrypation(String str)
    {//加密方法
        char chararry[] = str.toCharArray();//把字符串轉化爲字符數組
        for(int i =0; i< str.length(); i++)
        {
            //當讀到字母表後3位時,加密後是字母表前三位
             if(str.charAt(i) >= 88 && str.charAt(i) <= 90)
            {//大寫時
                chararry[i] = (char)(str.charAt(i) - 23);
            }
            else if(str.charAt(i) >= 120 && str.charAt(i) <= 122)
            {//小寫時
                chararry[i] = (char)(str.charAt(i) - 23);
            }
             //通常加密方法
            else
            {
                chararry[i]= (char) (str.charAt(i) + 3) ;
            }
            
        }
        return chararry;
    }
    public static char[] deciphering(String str)
    {//j解密方法
        char chararry[] = str.toCharArray();
        for(int i =0; i< str.length(); i++)
        {
            //當讀到字母表前3位時,加密後是字母表後三位
             if(str.charAt(i) >= 65 && str.charAt(i) <= 67)
            {//大寫時
                chararry[i] = (char)(str.charAt(i) + 23);
            }
            else if(str.charAt(i) >= 97 && str.charAt(i) <= 99)
            {//小寫時
                chararry[i] = (char)(str.charAt(i) + 23);
            }
             //通常解密密方法
            else
            {
                chararry[i]= (char) (str.charAt(i) - 3) ;
            }
            
        }
        return chararry;
    }
    public static void main(String[] args) {
        Scanner imput1 = new Scanner(System.in);
        Scanner imput2 = new Scanner(System.in);
        System.out.println("*****************************");
        System.out.println("*****加密字符串輸入---1---");
        System.out.println("*****解密字符串輸入---2---");
        System.out.println("*****************************");
        System.out.print("請輸入:");
        int flag = imput1.nextInt();
        System.out.print("請輸入一個英文字符串:");
        String  string = imput2.nextLine();
        if(flag == 1)
        {
            System.out.print("通過加密後爲:");
            for(int i =0;i <string.length(); i++)
            {
                System.out.print(Tast2.encrypation(string)[i]);
            }
        }
        if(flag == 2)
        {
            System.out.print("通過解密後爲:");
            for(int i =0;i <string.length(); i++)
            {
                System.out.print(Tast2.deciphering(string)[i]);
            }
        }
    
        imput1.close();
        imput2.close();
    }

}

(4)  結果截圖:設計

 

附錄:String類型經常使用方法整理:code

(1)String.equals():blog

  例:str1.equals(str2);若是字符串st1的內容與字符串str2內容相同,則返回true,不然返回falseip

(2)String.length():ci

     例:str1.length();返回字符串str1的長度,或者說是大小字符串

(3)String.charAt():

  例:str1.charAt(index);返回字符串str1中下標爲index的字符,下標從0開始計數

(4)String.getChars():

  例:str1.getChars(0,5,charArray,0);把字符串str1中從下標0開始到下標5結束的子串拷貝到字符數組charArray中,字符數組的起始下標爲0

(5)Sting.replace():

  例:str1.replace(oldChar,newChar);返回一個新字符,它擁有與字符串str1相同的字符,可是把每個oldCase字符都替換爲newCase字符

(6)Sting.toUpperCase():

  例:str1.toUpperCase();返回一個新字符,它擁有與字符串str1相同的字符,可是把全部的小寫字母都轉換成了大寫

(7)Sting.toLowerCase():

  例:str1.toLowerCase();返回一個新字符,它擁有與字符串str1相同的字符,可是把全部的大寫字母都轉換成了小寫

(8)Sting.trim():

  例:str1.trim();返回一個新字符,它擁有與字符串str1相同的字符,可是刪除了字符串str1的先後空白字符,(空白字符包括空格、製表符以及轉行字符)

(9)String.toCharArray():

  例:chararray[] = str1.toCharArray();把字符串str1轉換成字符數組,並保存在chararrayp[]中

相關文章
相關標籤/搜索