JAVA实现凯撒方阵加解密
程序员文章站
2022-07-09 13:47:27
...
package org.x;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
* 凯撒密码解密
* 1.生成25种位移字母组成的方阵
* 2.创建函数用于接收密文并打印25种解密结果
*
* (凯撒密码加密方法:加密同样可以使用解密算法生成
* 1.需要把顺序字母表的字母改为位移后的字母表
* 2.移动位数需改为26减去第一步字母表的位移数)
*
*/
public class KaiserMatrix {
public static void main(String[] args) {
String password = "ARTB ZJ WFV";
// String password = "JACK IS FOE";
int n = 9;
decryptOutPrint(password,n);
// getKaiserBox();
}
/**
*
* @param password 需解密的字符串密码
* @param n 0~25 当为0时打印25种解密代码,为1~25时表示字母移动位数
*/
public static void decryptOutPrint(String password,int n){
if(StringUtils.isEmpty(password) || n < 0 || n > 25){
System.out.print("参数错误");
return;
}
if(n==0){
for(int j=1;j<=getKaiserBox().size();j++){
decryptOutPrint(password,j);
}
}else{
String ciphertext = getKaiserBox().get(n-1);
String result = "";
for(int i = 0;i<password.length();i++){
int index = WORDS.indexOf(password.charAt(i));
if(index == -1){
result += " ";
}else{
result += index+1 == ciphertext.length() ? ciphertext.substring(index) : ciphertext.substring(index,index+1);
}
}
System.out.println(result);
}
}
/**
*生成位移字母方阵
*/
private static final String WORDS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// private static final String WORDS = "JKLMNOPQRSTUVWXYZABCDEFGHI";
public static List<String> getKaiserBox(){
List<String> list = new ArrayList<>();
for(int i=1;i<WORDS.length();i++){
list.add(WORDS.substring(i)+WORDS.substring(0,i));
}
return list;
}
}