首页 > 解决方案 > 我正在尝试在 java 中实现凯撒密码,但没有任何想法,因为我必须需要一个 char[] 键作为参数而不是 int 移位

问题描述

 public static void getkey() {

        char[] resultat = new char[256];

        for (char r = 0; r < 256; r++) {

            resultat[r] = r;
            System.out.print(r);
        }

    }

您好,当我运行这个程序时,它会显示 java 中的所有 256 个字符。就像这个java 控制台 一样,但我的目标是使用这样的 String 类型的参数。

public static void getkey(String key)

此参数是字母表中的字母。当我运行程序时,它应该替换已经存储的字符的位置,如图像链接中所示。结果是,如果我添加“ZYXWVUTSRQPONMLKJIHGFEDCBA”作为参数,A 将变为 Z,B 将变为 Y,C = X,直到 Z 变为 A。

而且我将不得不创建一个方法 encrypt ,因为我正在尝试创建一个凯撒密码,并且我将不得不在其他方法中调用此方法 getkey(String key) 来编码我的文本,我没有使用 int shift ,签名该方法如下所示:

public static void encrypt(String text , char[] key)

我到处找,我没有找到任何答案,请有人有想法,我是java编程的初学者。谢谢你。

标签: javacaesar-cipher

解决方案


你想做这样的事情:

private static char[] key = ZYXWVUTSRQPONMLKJIHGFEDCBA".toCharArray(); //for reference

public String encrypt(char[] key, String plaintext){
    char[] encryptedText = new char[plaintext.size];
    for(int i = 0; i < plaintext.size(); i++){
       int charIndex = plaintext.charAt[i] - 'A'; //normalizes to A=0, Z=24
       encryptedText[i] = key[charIndex % key.length];
    }
    return new String(encryptedText);
}

似乎您将遇到带有 ' ' 字符和其他字符的边缘情况,因此您可能需要添加一些逻辑来忽略不在加密范围内的字符。


推荐阅读