欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
    }

}

相关标签: KaiserMatrix