Интересная задачка по криптографии

Тема в разделе "WASM.CRYPTO", создана пользователем Qper, 4 ноя 2006.

  1. Qper

    Qper New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2006
    Сообщения:
    10
    Сперва напишу задачу, а потом о том как я пытался её хакнуть:
    -------------------------------------------------------------------------
    Взлом двухразового блокнота
    Можете ли Вы вычислить, какие два документа зашифровал Борис, используя один и тот же одноразовый блокнот – побитовое сложение по модулю 2 (и что представляет собой этот одноразовый блокнот)?
    Известна следующая информация:
    1) Шифрование использует коды ASCII со 128 возможными «буквами» в любой позиции (хотя некоторые из них значительно более вероятны, чем другие). Для списка набора знаков
    ASCII можно использовать ТурбоПаскаль под MS-DOS (команда write(char (i)), где i-число).
    2) Используемый одноразовый блокнот был произведён псевдослучайным образом, со значениями в пределах от 0 до 127.
    3) Использовался один и тот же блокнот, чтобы зашифровать оба исходных текста.
    4) Если длины исходных текстов не совпадают, то более короткий из них дополняется пробелами.
    5) Эти тексты - части относительно известных текстов на английском языке.

    шифр 1 :
    42 102 120 61 61 67 57 84 117 66 41 33 100 116 15 55 80 16 120 0 54 78 105 113 96 25 43 69 39 82 125 40 40 24 120 94 92 37 114 53 64 63 107 19 82 62 99 81 81 69 103 22 120 123 71 1 113 57 5 50 67 40 2 85 67 11 40 56 22 89 127 95 59 121 27 121 95 121 114 3 1 5 45 103 112 127 62 34 39 13 44 30 80 19 2 60 72 80 56 18 93 31 69 66 45 122 71 33 58 113 12 120 50 63 39 5 110 28 14 48 109 10 68 95 92 88 0 30 107 4 54 92 104 122 5 95 15 118 42 93 75 83 9 35 106 8 13 53 101 93 32 60 53 36 72 101 121 121 121 99 98 89 30 71 87 87 14 107 28 36 42 108 98 95 99 68 2 60

    шифр 2:
    34 40 111 117 37 64 32 88 55 74 112 117 103 121 23 54 91 5 116 84 42 79 127 35 114 80 48 67 39 71 53 62 97 12 113 48 47 34 122 57 80 63 122 77 61 93 119 68 71 83 107 87 116 115 2 19 101 112 86 127 78 109 2 89 81 17 85 5 21 94 127 84 59 109 13 42 25 116 126 7 7 18 106 118 113 62 37 63 43 102 69 73 79 14 7 105 70 17 18 25 93 56 7 27 7 84 8 117 50 123 9 44 42 50 98 76 111 6 4 48 117 7 86 88 92 75 29 16 121 65 52 80 107 50 19 8 41 46 10 84 74 95 93 57 106 27 72 125 101 73 97 56 58 51 89 101 108 125 112 99 114 72 18 9 84 30 7 107 89 34 39 103 33 86 36 3 74 104
    -------------------------------------------------------------------------

    Теперь о том как я пытался это хакнуть... Из пункта 4 условия можно предположить, что какой-то из текстов заканчивается пробелами. Я попытался проверить 2 предположения:
    1. Последние 10 символов первого текста - пробелы
    2. Последние 10 символов второго текста - пробелы

    Вот мой исходник на java (попытка расшифровать конец первого текста на основании предположения, что второй текст заканчивается пробелами):

    package cryptocracker;

    public class Main {

    private static int[] m_Text1 = {42, 102,..., 28, 36, 42, 108, 98, 95, 99, 68, 2, 60};
    private static int[] m_Text2 = {34, 40,..., 89, 34, 39, 103, 33, 86, 36, 3, 74, 104};
    private static int[] m_Key = new int[m_Text1.length + 1];

    public Main() {
    }

    public static void main(String[] args) {

    for (int i=m_Text1.length-11; i<=m_Text1.length-1; i++){
    m_Key = (int)' ' ^ m_Text2;
    m_Text1 = m_Text1 ^ m_Key;
    System.out.print("." + (char)m_Text1);
    }
    }

    }

    Выводит вот что: . .e.&.-.+.c.).g.g.h.t

    Вопрос у меня такой: Почему если изменить эту прогу для расшифровки ВТОРОГО текста на предположении о том, что ПЕРВЫЙ текст заканчивается пробелами (т.е. меняем тело цикла на
    m_Key = (int)' ' ^ m_Text1;
    m_Text2 = m_Text2 ^ m_Key;
    System.out.print("." + (char)m_Text2);
    ) вывод остаётся точно такой же, как и в первом случае, т.е. ". .e.&.-.+.c.).g.g.h.t"?

    Где мой косяк? Может я чё-то не увидел и есть какой-то другой путь решения?
     
  2. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
  3. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    15 топиков вниз. Название "банальный xor".
     
  4. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Stiver
    Какой шустрый:)
     
  5. Qper

    Qper New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2006
    Сообщения:
    10
    Фига коза :) Я даже наверно знаю чувака который её туда запостил :) Всё, всем спасибо :)