因此,我着手制作一个使用简单算法的小“编码”程序,到目前为止,所有程序都可以工作。我想出了算法,然后找到了它的逆向,以“解码”给定的字符串。
它的工作原理是在命令行中执行“ java Diver lock message password ”。然后,它获取ascii值,并通过算法Z_n =(X_n + Y_n)/ 2运行它,为您提供一个“已编码”字符串,该字符串随后可以在程序参数中用作“ java Driver unlock code 密码”。它采用这些值并通过X_n = 2Z_n-y_n运行它们。
这些算法仅在使用锁定部分时起作用,并且我在解锁过程中将与解锁过程相同的过程放在了锁的末尾,但是当仅尝试锁定过程时,输出不正确。
这里有一些关于我认为它是如何工作的摘要
锁定Oliver Chipper
解锁ChipäChipper
x =消息,y =密码,z =代码
x&y = z
z&y = x
我感觉这与命令行不包含用作输出的符号有关,但是对我所做的事情进行详尽的解释将是很棒的……谢谢!
public class Driver {
private static int[] x; //Message or code
private static int[] y; //Password
public static void main(String[] args) {
int SIZE = args[1].length() + args[2].length();
if (args[0].equals("lock")) {
lock(args, SIZE);
} else if (args[0].equals("unlock")) {
unlock(args, SIZE);
}
}
private static void lock(String[] args, int size) {
x = new int[size];
for (int i = 0; i < args[1].length(); i++) {
x[i] = args[1].charAt(i); //Message to ints
}
y = new int[size];
for (int i = 0; i < args[2].length(); i++) {
y[i] = args[2].charAt(i); //Password to ints
}
//code
int[] z = new int[size];
for (int i = 0; i < size; i++) {
z[i] = ((x[i] + y[i]) * 2); //Locking algorithm
System.out.print((char)z[i]);
}
System.out.println("\n");
for (int i = 0; i < size; i++) {
System.out.print((char)((z[i] / 2) - y[i])); //Unlocking algorithm
}
}
private static void unlock(String[] args, int size) {
x = new int[size];
for (int i = 0; i < args[1].length(); i++) {
x[i] = args[1].charAt(i); //Code to ints
}
y = new int[size];
for (int i = 0; i < args[2].length(); i++) {
y[i] = args[2].charAt(i); //Password to ints
}
for (int i = 0; i < size; i++) {
System.out.print((char)((x[i] / 2) - y[i])); //Unlocking algorithm
}
}}