diff --git a/src/Adfgvx.java b/src/Adfgvx.java new file mode 100644 index 0000000..15c9e43 --- /dev/null +++ b/src/Adfgvx.java @@ -0,0 +1,84 @@ +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +public class Adfgvx { + public static void main(String[] args) { + System.out.println(encode("neuen bereitschaftsraum in planquadrat x24", "hinterhalt", "beobachtungsposten")); + } + + private static String encode(String text, String subKeyword, String transKeyword) { + String plainText = text.toLowerCase().replaceAll("[^a-z0-9]", ""); + List matrix = fillMatrix(subKeyword); + + String substituted = plainText.chars() + .mapToObj(c -> mapToSub(c, matrix)) + .collect(Collectors.joining()); + + List> transMatrix = toTransMatrix(substituted, transKeyword); + + System.out.println(transMatrix); + + System.out.println(substituted); + return ""; + } + + static List> toTransMatrix(String text, String keyword) { + var cols = keyword.chars() + .mapToObj(i -> { + List l = new ArrayList<>(); + l.add((char) (i)); + return l; + }) + .toList(); + + System.out.println(keyword.length()); + + for (int i = 0; i < text.length(); i++) { + char c = text.charAt(i) ; + cols.get(i % keyword.length()).add(c); + } + + return cols; + } + + static final char[] ADFGVX = new char[]{'a', 'd', 'f', 'g', 'v', 'x'}; + + static String mapToSub(int character, List matrix) { + int index = matrix.indexOf((char) character); + char first = ADFGVX[index / 6]; + ch ar second = ADFGVX[index % 6]; + return "" + first + second; + } + + static List fillMatrix(String keyword) { + List matrix = new ArrayList<>(36); + + Set chars = new HashSet<>(); + + keyword.chars() + .filter(c -> { + if (chars.contains((char) c)) return false; + chars.add((char) c); + return true; + }) + .mapToObj(c -> (char) c) + .forEach(matrix::add); + + + for (char i = 'a'; i <= 'z'; i++) { + if (!chars.contains(i)) { + matrix.add(i); + } + } + + for (char i = '0'; i <= '9'; i++) { + if (!chars.contains(i)) { + matrix.add(i); + } + } + return matrix; + } +} diff --git a/src/Encryption.java b/src/Encryption.java new file mode 100644 index 0000000..502c806 --- /dev/null +++ b/src/Encryption.java @@ -0,0 +1,3 @@ +public interface Encryption { + String encrypt(String value, String... args); +}