lovema1210

凯撒密码:

1.程序设计思想:

首先要获取加密内容和密钥;

加密和解密中按照字符错n位的规则,构造加密和解密的函数;

最后直接调用函数,并输出操作过后的结果。

关键点是操作字符的移位。

2.程序流程图:

3.源程序:

package 课后作业;

import java.util.Scanner;

public class CaesarCipher {

    public String path;//公有变量path为要操作的函数

    public String estr="";//公有变量estr为操作过后的字符串

    public char c;//公有变量c是要操作的path提取后的字符

public static void main(String[] args) {

// TODO Auto-generated method stub

   CaesarCipher c=new CaesarCipher();//建立新的对象

   System.out.println("*凯撒密码*");

   System.out.println("1.加密");//要执行的操作

   System.out.println("2.解密");

   System.out.println("你要进行的操作:");

   int num;

   Scanner scanner=new Scanner(System.in);//输入要执行的操作num

   num=scanner.nextInt();

       System.out.println("情输入你要进行操作的字符串");//输入操作的字符串

       c.path=scanner.next();

   if(num==1)

   {

   c.jiami(c.path, 3);//调用加密函数

   System.out.println("加密过后的字符串为:"+c.estr);

   }

   else

   {

   c.jiemi(c.path, 3);//调用解密函数

   System.out.println("解密过后的内容为:"+c.estr);

   }

}

public void jiami(String key,int n)//加密

{

for(int i=0;i<key.length();i++)

{

c=key.charAt(i);//取出字符串的每个字符

if(c>=\'A\'&&c<=\'Z\')//当字符在"A""Z"之间的时候

{

if(c+n%26<=\'Z\')//当提取的字符在Z之前的n位时

{

   estr+=(char)(c+n%26);

}

else

{

estr+=(char)(\'A\'+((n-(\'Z\'-c)-1)%26));//孤立出来的n个字符

}

}

else if(c>=\'a\'&&c<=\'z\')

{

if(c+n%26<=\'z\')//当提取的字符在z之前的n位时

{

   estr+=(char)(c+n%26);

}

else

{

estr+=(char)(\'a\'+((n-(\'z\'-c)-1)%26));//孤立出来的n个字符

}

}

else if(c>=\'0\'&&c<=\'9\')

{

if(c+n%10<=\'9\')

{

   estr+=(char)(c+n%10);//当提取的字符在9之前的n位时

}

else

{

estr+=(char)(\'0\'+((n-(\'9\'-c)-1)%10));//孤立出来的n个字符

}

}

else

{

estr+=c;

}

}

 

}

public void jiemi(String key,int n)//解密

{

for(int i=0;i<key.length();i++)

{

c=key.charAt(i);//取出字符串的每个字符

if(c>=\'A\'&&c<=\'Z\')//当字符在"A""Z"之间的时候

{

if(c-n%26>=\'A\')//当提取的字符在A之前的n个时

{

   estr+=(char)(c-n%26);

}

else

{

estr+=(char)(\'Z\'-((n-(c-\'A\')-1)%26));//操作孤立出来的n个字符

}

}

else if(c>=\'a\'&&c<=\'z\')

{

if(c-n%26>=\'a\')//当提取的字符在a之前的n个时

{

   estr+=(char)(c-n%26);

}

else

{

estr+=(char)(\'z\'-((n-(c-\'a\')-1)%26));//操作孤立出来的n个字符

}

}

else if(c>=\'0\'&&c<=\'9\')

{

if(c-n%10>=\'0\')//当提取的字符在0之前的n个时

{

   estr+=(char)(c-n%10);

}

else

{

estr+=(char)(\'9\'-((n-(c-\'0\')-1)%10));//操作孤立出来的n个字符

}

}

else

{

estr+=c;

}

}

}   

}

4.程序结果截图:

 

分类:

技术点:

相关文章: