因此,我有一个为 Java 作业编写的“Caesar Cipher”,但我缺少 2 个必需的组件,到目前为止我对 Java 的了解有限,我无法弄清楚这些组件。
我需要通过将输出的字符串分成 4 个字符的块来进一步加密我的输出。即 AFSD GRTH WRGD
我尝试从标准库中查找 java 方法,但我还没有学习正则表达式,而且我不能使用番石榴,因为我是通过电子邮件提交的。这也没有在课堂上讲过。
我还需要包含一个 bruteForce 方法来加密我的纯文本,但为每个可能的密钥 (0-25) 输出密文。我尝试使用 while 循环将 shiftKey 设置为 0,并在循环结束时将键增加 1,但这会输出一个疯狂的混乱。
public String bruteForce(String plainText) {
plainText = plainText.replaceAll("[^A-Za-z0-9]", "");
String cipherText = "";
int shiftKey = 0;
while (shiftKey <= 26) {
for (int i = 0; i < plainText.length(); i++) {
int charPosition = alphabet.indexOf(plainText.charAt(i));
int keyVal = (shiftKey + charPosition) % 26;
char replaceVal = this.alphabet.charAt(keyVal);
cipherText += replaceVal;
shiftKey++;
}
}
return cipherText.toUpperCase();
}
这是我到目前为止的代码
class CaesarCipher {
private final String alphabet = "abcdefghijklmnopqrstuvwxyz";
private final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public String bruteForce(String plainText, int shiftKey) {
plainText = plainText.replaceAll("[^A-Za-z0-9]", "");
String cipherText = "";
for (int i = 0; i < plainText.length(); i++) {
int charPosition = alphabet.indexOf(plainText.charAt(i));
int keyVal = (shiftKey + charPosition) % 26;
char replaceVal = this.alphabet.charAt(keyVal);
cipherText += replaceVal;
}
return cipherText.toUpperCase();
}
public String encrypt(String plainText, int shiftKey) {
plainText = plainText.replaceAll("[^A-Za-z0-9]", "");
String cipherText = "";
for (int i = 0; i < plainText.length(); i++) {
int charPosition = alphabet.indexOf(plainText.charAt(i));
int keyVal = (shiftKey + charPosition) % 26;
char replaceVal = this.alphabet.charAt(keyVal);
cipherText += replaceVal;
}
return cipherText.toUpperCase();
}
public String decrypt(String cipherText, int shiftKey) {
String plainText = "";
for (int i = 0; i < cipherText.length(); i++) {
int charPosition = this.ALPHABET.indexOf(cipherText.charAt(i));
int keyVal = (charPosition - shiftKey) % 26;
if (keyVal < 0) {
keyVal = this.ALPHABET.length() + keyVal;
}
char replaceVal = this.ALPHABET.charAt(keyVal);
plainText += replaceVal;
}
return plainText.toUpperCase();
}
public static void main(String args[]) {
String plainText = "this; is s'ome te.xt with punct";
int shiftKey = 4;
CaesarCipher cc = new CaesarCipher();
String cipherText = cc.encrypt(plainText, shiftKey);
System.out.println("Plain Text :" + plainText);
System.out.println("Cipher Text :" + cipherText);
String PlainText = cc.decrypt(cipherText, shiftKey);
System.out.println("Plain Text :" + PlainText);
}
}