java - 在实现维吉尼亚密码方面需要帮助

标签 java

我需要帮助实现维吉尼亚密码。我的输入字符串“Cat&Dog”和键“abc”应该返回“Cbv&Eqg”,但我得到“cat&eqg”,代码如下所示。

public class Main {

    public static void main(String[] args) {
        String a = "Cat&dog";
        String b = "abc";
        String c = encrypt(a , b);
        System.out.println(c);
    }

    public static String encrypt (String text, String key){
        String result = "";
        for (int i = 0, j = 0; i < text.length(); i++){
            char cur = text.charAt(i);
            if (cur > 'a' && cur < 'z'){
                result += (char)((cur + key.charAt(j) - 2 * 'a') % 26 +'a');
                j = ++j % key.length();
            }
            else if (cur <= 'A' && cur >= 'Z'){
                result += (char)((cur - key.charAt(j) -2 * 'a') % 26 +'A');
                j = ++j % key.length();
            }
            else {
                result += text.charAt(i);
            }
        }
        return result;
    }
}

最佳答案

您的案例else if(cur <= 'A' && cur >= 'Z')永远不会是真的。 x <= 65 && x >= 90 中没有 x .

如果是大写字母,您需要减去“A”并添加 key 。

解决方案如下:

public static String encrypt (String text, String key){
    String result = "";
    for (int i = 0, j = 0; i < text.length(); i++){
        char cur = text.charAt(i);
        if (cur >= 'a' && cur <= 'z'){
            result += (char) ((cur + key.charAt(j) - 2 * 'a') % 26 + 'a');
        }
        else if (cur >= 'A' && cur <= 'Z'){
            result += (char) ((cur - 'A' + key.charAt(j) - 'a') % 26 + 'A');
        }
        else {
            result += text.charAt(i);
        }
        j = ++j % key.length();
    }
    return result;
}

“Cat&Dog”wit key = “abc”的输出:

Cbv&Eqg

关于java - 在实现维吉尼亚密码方面需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56473226/

相关文章:

java - 查找数组的最大值

java - 当我离开 Activity 并返回时,Activity 不断重启

java - 轴客户端 stub 超时问题

java.lang.UnsupportedOperationException 用于从 javafx tableview 中删除一行

java - 如何按月过滤目录中的文件、按月压缩它们、重命名它们、将它们放在包含 zip 文件的文件夹中?

java - Android退出AsyncTask问题

java - 在 JFrame 中使用 JPanel 无法正确调整大小或移动

java - 选中项目时,selectManyCheckbox 元素不会复制到数组

Java问题

java - 尝试将新的dialogFragment添加到 fragment 上的现有dialogfragmen时,FragmentManager.beginTransaction()在空对象引用上