首页 > 技术文章 > java凯撒密码

lovema1210 2017-10-26 16:03 原文

凯撒密码:

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.程序结果截图:

 

推荐阅读