Зашифровать сообщение нулями по условию
Мне нужно зашифровать сообщение нулями используя ASCII (7 бит). Метод public static String input(Scanner scanner) используется для преоброзования сообщения в технологию ASCII (7 бит).
Условие:
Если человек введёт букву, например, C (англ. версия) - в 7-ми битном представлении это будет 1000011. Это 7-ми битное значение передаётся в конструктор public class SecurityType.
Мне нужно что б соблюдалось условие ниже:
- 00 0 (ноль в изначальном сообщении соответствует «00» в первом блоке; единственный ноль во втором блоке означает, что этот бит в последовательности один)
- 0 0 (единица в изначальном сообщении соответствует «0» в первом блоке; в последовательности этот бит один, поэтому во втором блоке один ноль)
- 00 000 (ноль в изначальном сообщении соответствует «00» в первом блоке; три нуля во втором блоке означает, что последовательность состоит из трех битов)
- 0 000 (единица в изначальном сообщении соответствует «0» в первом блоке; три нуля во втором блоке означает, что последовательность состоит из трех битов)
Тобишь на выходе должно быть: 0 0 00 0000 0 00, но на данный момент у меня 0 0 00 000
Ещё раз (в примере приведу последовательность из 2-ух битов):
- Если идёт сочетание 10, то на выходе 0 0 00 0
- Если идёт сочетание 01, то на выходе 00 0 0 0
- Если идёт сочетание 11, то на выходе 0 00
- Если идёт сочетание 00, то на выходе 00 00
Вот мой код:
public class SecurityType {
private final String INPUT_LINE;
private String result = "";
public SecurityType(String line) {
this.INPUT_LINE = line;
}
public void generateSecurityMessage() {
int stepUp = 1;
int stepDown = 0;
for (int i = 0; i < INPUT_LINE.length()-1; i++) {
byte o1 = Byte.parseByte(String.valueOf(INPUT_LINE.charAt(i)));
boolean checkZero = false;
boolean checkOne = false;
if (Byte.parseByte(String.valueOf(INPUT_LINE.charAt(i))) == Byte.parseByte(String.valueOf(INPUT_LINE.charAt(i + 1)))) {
stepUp++;
} else {
for (int j = stepDown; j < stepUp; j++) {
byte o2 = Byte.parseByte(String.valueOf(INPUT_LINE.charAt(j)));
if (o1 == o2 && o1 == 0 && !checkZero) {
result += " 00 0";
checkZero = true;
} else if (o1 == o2 && o1 == 0 && checkZero) {
result += "0";
} else if (o1 == o2 && o1 == 1 && !checkOne) {
result += " 0 0";
checkOne = true;
} else {
result += "0";
}
}
stepDown = stepUp;
}
}
}
public void printResult() {
System.out.println(result);
}
}
import java.util.Scanner;
public class Test {
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
SecurityType securityType = new SecurityType(input(scanner));
securityType.generateSecurityMessage();
securityType.printResult();
}
public static String input(Scanner scanner) {
System.out.print("Input your message: ");
String s = scanner.nextLine();
byte[] bytes = s.getBytes();
StringBuilder binary = new StringBuilder();
for (int j = 0; j < bytes.length; j++) {
int val = bytes[j];
for (int i = 0; i < 7; i++) {
val <<= 1;
binary.append((val & 128) == 0 ? 0 : 1);
}
}
System.out.println("'" + s + "' to binary: " + binary);
return binary.toString();
}
}