在实现基因密码方面需要帮助

时间:2019-06-06 07:59:30

标签: java

我需要帮助实现Vigenere密码。我的输入字符串“ 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;
    }
}

1 个答案:

答案 0 :(得分:1)

您的情况else if(cur <= 'A' && cur >= 'Z')将永远不成立。 x <= 65 && x >= 90中没有x。

然后您需要减去一个'A'并在大写字母的情况下添加密钥。

所以这里是解决方案:

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

“猫和狗”机智密钥=“ abc”的输出:

  

Cbv&Eqg