java凯撒密码
凯撒密码:
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.程序结果截图: