zoukankan      html  css  js  c++  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)  源代码:

    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类型常用方法整理:

    (1)String.equals():

      例:str1.equals(str2);如果字符串st1的内容与字符串str2内容相同,则返回true,否则返回false

    (2)String.length():

         例: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[]中

  • 相关阅读:
    C语言I博客作业08
    C语言I博客作业07
    第十周助教总结
    关于Dev-c++运行时与Windows不兼容问题
    C语言I博客作业06
    第九周助教总结
    C语言I作业07
    C语言I博客作业06
    C语言I作业05

  • 原文地址:https://www.cnblogs.com/dmego/p/6007143.html
Copyright © 2011-2022 走看看