用java实现多表密码的解密与加密(维吉尼亚密码)
编码规则a=0,b=1,…,z=25。(网络安全书本例题)
将字符串转换成ASCII码,与密钥进行运算后,转换回字符串。
加密算法:
//多表密码 加密
import java.util.Scanner;
public class text1 {
public static void main(String[] args)
{
int[]a=new int[100];
Scanner s = new Scanner(System.in);
System.out.println("明文:");
String str = s.nextLine();
char[] chars =str.toCharArray();
Scanner sr = new Scanner(System.in);
System.out.println("4位密钥:");
String strr = sr.nextLine();
char[] cha =strr.toCharArray();
int[]b=new int[4];
for (int i = 0; i < cha.length; i++)
{
b[i]=(int)cha[i];
}
System.out.println("密文:");
for (int i = 0,j=0; i < chars.length; i++,j++)
{
a[i]=(int)chars[i];
if(a[i]==32)
{
--j;
System.out.print((char)a[i]);
}
else
{
a[i]=a[i]+b[j%4]-97;
if(a[i]>122)
{
a[i]=a[i]-26;
}
System.out.print((char)a[i]);
}
}
}
}
加密:
解密算法:
//多表密码 解密
import java.util.Scanner;
public class text1 {
public static void main(String[] args)
{
int[]a=new int[100];
Scanner s = new Scanner(System.in);
System.out.println("密文:");
String str = s.nextLine();
char[] chars =str.toCharArray();
Scanner sr = new Scanner(System.in);
System.out.println("4位密钥:");
String strr = sr.nextLine();
char[] cha =strr.toCharArray();
int[]b=new int[4];
for (int i = 0; i < cha.length; i++)
{
b[i]=(int)cha[i];
}
System.out.println("明文:");
for (int i = 0,j=0; i < chars.length; i++,j++)
{
a[i]=(int)chars[i];
if(a[i]==32)
{
--j;
System.out.print((char)a[i]);
}
else
{
a[i]=a[i]-b[j%4]+97;
if(a[i]<97&&a[i]!=32)
{
a[i]=a[i]+26;
}
System.out.print((char)a[i]);
}
}
}
}
解密: