Java で、文字列を vigenere 暗号のようにエンコードするプログラムを作成しようとしています。実行例は次のようになります
java Encrypt -e lemon < in.txt > out.txt
in.txt は ATTACKATDAWN を読み取る必要があり、out.txt は LXFOPVEFRNHR を読み取る必要があります。使用される引数の数が不十分な場合は、使用法ステートメントを出力する必要があります。ただし、これに対して暗号化メソッドを実行すると、「?????????£?」が返され、THAT に対して復号化メソッドを実行すると、「?? ???? ???」が返されます。 ?" であり、必要な 2 つの引数よりも少ない数を入力すると、返されます
スレッド「メイン」での例外 java.lang.ArrayIndexOutOfBoundsException: 1 at Encrypt.main(Encrypt.java:22)
ここに私のコードがあります
import java.util.Scanner;
public class Encrypt
{
public static void main(String[] args)
{
Scanner scan = new Scanner (System.in);
String msg = scan.nextLine();
String key = args[1];
if (args.length < 2)
{
System.out.println("Encryption program by ----");
System.out.println("Usage: java Encrypt [-e, -d] < inputFile > outputFile");
System.exit(0);
}
else if (args[0].equals ("-e"))
{
String emsg = encrypt(args[1], msg);
System.out.println(emsg);
}
else if (args[0].equals ("-d"))
{
String dmsg = decrypt(args[1], msg);
System.out.println(dmsg);
}
}
public static void usage(String[] args)
{
if (args.length < 2)
{
System.out.println("Encryption program by --------");
System.out.println("Usage: java Encrypt [-e, -d] < inputFile > outputFile");
System.exit(0);
}
}
public static String encrypt(String key, String msg)
{
String emsg = "";
for (int i = 0; i < msg.length(); i++)
{
int m = msg.charAt(i);
int k = key.charAt(i % key.length());
int e = (m + (k - 32));
char s = (char) e;
if (e > 126)
e = (e - (127 - 32));
emsg += s;
}
return emsg;
}
public static String decrypt(String key, String msg)
{
String dmsg = "";
for (int i = 0; i < msg.length(); i++)
{
int m = msg.charAt(i);
int k = key.charAt(i%key.length());
int e = (m - (k - 32));
char s = (char) e;
if (e > 126)
e = (e - (127 - 32));
dmsg += s;
}
return dmsg;
}
}
正直なところ、自分が何を間違っているのかわかりません。どんな支援も大歓迎です!