JAVA实现古典置换密码的加密解密

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(Choice==1)
{
System.out.println("您进入了加密程序");
System.out.print("请输入您需要加密的明文:");
String MingWen=br.readLine();
System.out.print("请输入加密秘钥:");
String key=br.readLine();
System.out.println("请您输入需要的服务,1为加密,2为解密");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int Choice=Integer.parseInt(br.readLine());
for(int i=0;i<hang;i++)
{
for(int j=0;j<lie;j++)
{
System.out.print(mingwen[i][j]);
}
}
}
}
{
System.out.print(mima[i][a[j]]);
}
}
}
static void jiemi(String miwen,String key)
{
int hang=(int)Math.ceil((double)miwen.length()/(double)key.length());//
jiami(MingWen,key);
Choice=2;
}
if(Choice==2)
{
System.out.println("您进入了解密程序");
System.out.print("请输入您需要解密的密文:");
String MiWen=br.readLine();
System.out.print("请输入解密秘钥:");
for(int i=0;i<key.length()ቤተ መጻሕፍቲ ባይዱi++)//利用嵌套循环在数组a中记录转换映射关系
for(int j=0;j<key.length();j++)
{
if( (int)key.charAt(i)==key_xu[j])
{
a[i]=j;
}
}
char[][] mima=new char[hang][lie];//定义第一次转置后的密码矩阵
for(int i=0;i<hang;i++)//嵌套循环将明文存入矩阵
{
for(int j=0;j<lie;j++)
{
if(temp<mingwen.length())
{juzhen[i][j]=mingwen.charAt(temp);
temp++;}
}
}
int[] key_xu=new int[key.length()];//此数组存储秘钥字母顺序
String key2=br.readLine();
jiemi(MiWen,key2);
System.exit(0);
}
else
{
System.out.println("输入错误,请重新输入,1为加密,2为解密:\n");
System.exit(0);
}
}
static void jiami(String mingwen,String key)
}
Arrays.sort(key_xu); //对秘钥ASCII码进行排序
int[] a=new int[key.length()];//此数组用于记录转换映射
for(int i=0;i<key.length();i++)//利用嵌套循环在数组a中记录转换映射关系
for(int j=0;j<key.length();j++)
for(int j=0;j<lie;j++)//开始第一次转置
for(int i=0;i<hang;i++)
{
mima[i][j]=juzhen[i][a[j]];
}
System.out.print("加密后密码:");
for(int j=0;j<lie;j++)//第二次转置输出结果
{
for(int i=0;i<hang;i++)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class zhihuan {
public static void main(String args[]) throws IOException{
{
if( (int)key.charAt(i)==key_xu[j])
{
a[i]=j;
}
}
char[][] ming=new char[hang][lie];//定义第一次转置后的密码矩阵
for(int j=0;j<lie;j++)//开始第一次转置
for(int i=0;i<hang;i++)
{
ming[i][a[j]]=juzhen[i][j];
}
char[][] mingwen=new char[hang][lie];
for(int j=0;j<lie;j++)//开始第2次转置
for(int i=0;i<hang;i++)
{
mingwen[i][a[j]]=ming[i][j];
}
System.out.println("解密结果为:");
for(int i=0;i<key.length();i++)//将秘钥转ASCII码
{
key_xu[i]=(int)key.charAt(i);
}
Arrays.sort(key_xu); //对秘钥ASCII码进行排序
int[] a=new int[key.length()];//此数组用于记录转换映射
{juzhen[i][j]=miwen.charAt(temp);
temp++;}
}
}
int[] key_xu=new int[key.length()];//此数组存储秘钥字母顺序
for(int i=0;i<key.length();i++)//将秘钥转ASCII码
{
key_xu[i]=(int)key.charAt(i);
int lie=key.length();//
char[][] juzhen=new char[hang][lie];
int temp=0;
for(int j=0;j<lie;j++)//嵌套循环将明文存入矩阵
{
for(int i=0;i<hang;i++)
{
if(temp<miwen.length())
{
int hang=(int)Math.ceil((double)mingwen.length()/(double)key.length());//行数
int lie=key.length();//列数
char[][] juzhen=new char[hang][lie];//定义矩阵存储明文
int temp=0;
相关文档
最新文档