搜索
您的当前位置:首页正文

(完整版)JAVA实现古典置换密码的加密解密

来源:好走旅游网


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{

System.out.println(\"请您输入需要的服务,1为加密,2为解密\");

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

int Choice=Integer.parseInt(br.readLine());

if(Choice==1)

{

System.out.println(\"您进入了加密程序\");

System.out.print(\"请输入您需要加密的明文:\");

String MingWen=br.readLine();

System.out.print(\"请输入加密秘钥:\");

String key=br.readLine();

jiami(MingWen,key);

Choice=2;

}

if(Choice==2)

{

System.out.println(\"您进入了解密程序\");

System.out.print(\"请输入您需要解密的密文:\");

String MiWen=br.readLine();

System.out.print(\"请输入解密秘钥:\");

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)

{

int hang=(int)Math.ceil((double)mingwen.length()/(double)key.length());//行数

int lie=key.length();//列数

char[][] juzhen=new char[hang][lie];//定义矩阵存储明文

int temp=0;

for(int i=0;i{

for(int j=0;j{

if(temp{juzhen[i][j]=mingwen.charAt(temp);

temp++;}

}

}

int[] key_xu=new int[key.length()];//此数组存储秘钥字母顺序

for(int i=0;i{

key_xu[i]=(int)key.charAt(i);

}

Arrays.sort(key_xu); //对秘钥ASCII码进行排序

int[] a=new int[key.length()];//此数组用于记录转换映射

for(int i=0;ifor(int j=0;j{

if( (int)key.charAt(i)==key_xu[j])

{

a[i]=j;

}

}

char[][] mima=new char[hang][lie];//定义第一次转置后的密码矩阵

for(int j=0;jfor(int i=0;i{

mima[i][j]=juzhen[i][a[j]];

}

System.out.print(\"加密后密码:\");

for(int j=0;j{

for(int i=0;i{

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());//

int lie=key.length();//

char[][] juzhen=new char[hang][lie];

int temp=0;

for(int j=0;j{

for(int i=0;i{

if(temp{juzhen[i][j]=miwen.charAt(temp);

temp++;}

}

}

int[] key_xu=new int[key.length()];//此数组存储秘钥字母顺序

for(int i=0;i{

key_xu[i]=(int)key.charAt(i);

}

Arrays.sort(key_xu); //对秘钥ASCII码进行排序

int[] a=new int[key.length()];//此数组用于记录转换映射

for(int i=0;ifor(int j=0;j{

if( (int)key.charAt(i)==key_xu[j])

{

a[i]=j;

}

}

char[][] ming=new char[hang][lie];//定义第一次转置后的密码矩阵

for(int j=0;jfor(int i=0;i{

ming[i][a[j]]=juzhen[i][j];

}

char[][] mingwen=new char[hang][lie];

for(int j=0;jfor(int i=0;i{

mingwen[i][a[j]]=ming[i][j];

}

System.out.println(\"解密结果为:\");

for(int i=0;i{

for(int j=0;j{

System.out.print(mingwen[i][j]);

}

}

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top