как найти a и b в этой функции вида f (p) = (a.p + b) mod 2, зная, что дан простой текст + зашифрованный текст (грубая сила) - PullRequest
0 голосов
/ 12 мая 2018

это вопрос взлома кода. Грубая сила является важной и основной алгоритмической парадигмой.В алгоритме грубой силы задача решается самым простым способом на основе постановки задачи и определения терминов.Алгоритмы грубой силы предназначены для решения проблем без учета требуемых вычислительных ресурсов, где в некоторых вы изучаете каждое возможное решение, пока не найдете работающее.Разбейте ключ (найдите a и b), используемый для шифрования с использованием грубой силы, где вы знаете открытый текст и зашифрованный текст.Предположим, что он был зашифрован с использованием одного шифра f (p) = (ap + b).

, и это мой код, есть ли другой способ сделать это?

public static int[] findKeys(String plaintext, String ciphertext){
    int[] keys = new int[2];
    int temp, a = 0, b = 0;
    char p, c;

    for (int i = 0; i < plaintext.length(); i++) {
        p = plaintext.charAt(i);
        c = ciphertext.charAt(i);

        for (int x = 0; x <= 9; x++) {
            a = a + x;

            for (int y = 0; y <= 9; y++) {
                b = b + y;
                temp = (int) p - 65; //convert to int
                temp = Math.floorMod((a * temp + b), 26);
                p = (char) (temp + 65); //convert to char

                if (p == c) {
                    keys[0] = a;
                    keys[1] = b;
                }
            }
        }
    }

    return keys;
}
...