Vigenere密码问题

时间:2018-09-08 21:07:12

标签: java encryption

对于编程和尝试使Vigenere密码正常工作,我是一个相对较新的人。我从一些不同的密码中获得了一些建议,但是现在我正在使用一个密码,如果我对其进行修改,它将无法正常工作。如果我将密码更改为原始的“ VigenereCipher”而不是“ apple”,则可以正常使用。创建此问题的代码是什么?我为代码混乱感到抱歉,但是我一直在复制和粘贴以测试对代码的各种编辑。

  

输出:

sealseals ealse
FCJJMUMPJB
.+225=582* 
  

预期输出:

sealsealse
encryptedcode (not sure if this is correct above)
HELLOWORLD

代码:

        public static void main(String[] args) {
            String key = "apple";
            String ori = "hello world"; 
            String resizedKey = key;
            if (key.length() < ori.length()) {
            for (int i = 0, j = 0; i < ori.length(); i ++) {
                if (ori.charAt(i) == (char)32) {
                    resizedKey += (char)32;
                }
                else {
                    if (j < key.length()) {
                        resizedKey += key.charAt(j);
                        j++;
                    }
                    else {
                        j = 0;
                        resizedKey += key.charAt(j);
                        j++;
                        }                           
                }
            }
        }
                System.out.println (resizedKey);
                String enc = encrypt(ori, resizedKey);
                System.out.println(enc);
                System.out.println(decrypt(enc, resizedKey));

        }                       
        static String encrypt(String text, final String key) {
            String res = "";
            text = text.toUpperCase();
            for (int i = 0, j = 0; i < text.length(); i++) {
                char c = text.charAt(i);
                if (c < 'A' || c > 'Z') continue;
                res += (char)((c + key.charAt(j) - 2 * 'A') % 26 + 'A');
            }
            return res;
        }
         static String decrypt(String text, final String key) {
            String res = "";
            text = text.toUpperCase();
            for (int i = 0, j = 0; i < text.length(); i++) {
                char c = text.charAt(i);
                if (c < 'A' || c > 'Z') continue;
                res += (char)((c - key.charAt(j) + 26) % 26 + 'A');
            }
            return res;
        }
    }   

0 个答案:

没有答案