だから私はJavaの割り当てのために書かれた "Caesar Cipher"を持っていますが、これまでのJavaの限られた知識では理解できない2つの必要なコンポーネントがありません.
出力された文字列を 4 文字のチャンクに分割して、出力をさらに暗号化する必要があります。つまり、AFSD GRTH WRGD
標準ライブラリからJavaメソッドを調べてみましたが、まだ正規表現を学んでおらず、これをメールで送信しているためグアバを使用できません。これもまだ授業で扱っていません。
また、plainText を暗号化するが、すべての可能なキー (0-25) に対して cipherText を出力する bruteForce メソッドを含める必要があります。shiftKey を 0 に設定し、ループの最後でキーを 1 ずつインクリメントする while ループを使用してみましたが、非常に混乱しました。
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);
}
}