- 凯撒密码是一种代换密码。据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。在人类历史上,对信息保护的需求与对信息本身的需求一样久远。第一个用于加密和解密文本的编码方式是凯撒密码。
主函数
package cipher;
import java.util.Scanner;
public class Switch {
public static void main(String args[]) {
System.out.println("*******欢迎来到凯撒密码加解密系统*******");
System.out.println("请输入你所要使用的功能:1.加密 2.解密");
Scanner t=new Scanner(System.in);
int choice=t.nextInt();
switch(choice) {
case 1:
Encrypt st=new Encrypt();
System.out.println("请输入明文:");
Scanner s1=new Scanner(System.in);
String text=s1.nextLine();
System.out .println("请输入偏移量:");
Scanner s2=new Scanner(System.in);
int key1=s2.nextInt();
st.encryption(key1, text);break;
case 2:
Decode sr=new Decode();
System.out.println("请输入密文");
Scanner s3=new Scanner(System.in);
String code=s3.nextLine();
System.out.println("请输入偏移量");
Scanner s4=new Scanner(System.in);
int key2=s4.nextInt();
sr.decryption(key2, code);break;
}
}
}
加密函数
package cipher;
public class Decode {
public void decryption(int key,String code) {
char a[]=code.toCharArray();
int b[]=new int[a.length];
int temp;
for(int i=0;i<a.length;i++) {
if(a[i]<=122&&a[i]>=97) {
b[i]=(int)a[i];
temp=(b[i]-97-key)%26;
if(temp<0) {
temp+=26;
}
b[i]=temp+97;
}
if(a[i]<=90&&a[i]>=65) {
b[i]=(int)a[i];
temp=(b[i]-65-key)%26;
if(temp<0) {
temp+=26;
}
b[i]=temp+65;
}
else {
a[i]=a[i];
}
}
for(int k=0;k<a.length;k++) {
a[k]=(char)b[k];
System.out.print(a[k]);
}
System.out.println(" ");
}
}
解密函数
package cipher;
public class Encrypt extends Switch {
public void encryption(int key,String text) {
char a[]=text.toCharArray();
int b[]=new int[a.length];
for(int i=0;i<a.length;i++) {
if(a[i]<=122&&a[i]>=97) {
b[i]=(int)a[i];
b[i]= (b[i]-97+key)%26+97;
}
if(a[i]>=65&&a[i]<=90) {
b[i]=(int)(a[i]);
b[i]=(b[i]-65+key)%26+65;
}
else {
a[i]=a[i];
}
}
//输出
for(int k=0;k<a.length;k++) {
a[k]=(char)b[k];
System.out.print(a[k]);
}
System.out.println(" ");
}
}
代码测试