对于编程和尝试使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;
}
}