ХЕ хе да интересно поглядеть как же человек за час все вычеслил.... Ну покрайне мере я с первой парой не ошибься =)))
Может такой: Код (Text): b0=(c1 and c2) xor (a1 and a2) b=not(c1 xor a1) если б0=б то мы нашли подходящий ключ, подбор пргоном а1 и а2 Формулу выводил математически. Далее просто подстовляем б в: a1=c1 xor b a2=c2 xor b
Не понял, алго известно - неизвестен только ключ. Не буду долго мучать, помог мне "боб дилан" и гугль Пробовал по разному, писать не буду -все равно результат нулевой был (выяснил только, что вторая буква и последнии 3 пробелы). Потом начал вручную подбирать текст А, смотрел что получается при этом в тексте Б. Последовательность была примерно такая: 1. А='I ' -> B='An'. 2. A='And ' -> B='I sh' 3. гугль "боб дилан тeксты пеcен" или типа того 4. A='I shall be free' -> B='and you, my2qh}' 5. Опаньки 6. гугль "боб дилан and you, my" 7. А='And you, my father, there on the sad height' ->B='I shall be telling this with a sigh Somewhe' 8. Ж) Опять гугль и все. Не, я не препод
Black_sun Код (Text): #!/usr/bin/perl $|=1; @c1=split / +/,"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"; @c2=split / +/,"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"; # b0=(c1 and c2) xor (a1 and a2) # b=not(c1 xor a1) for ($i=0;$i<=$#c1;$i++) { for ($a1=0;$a1<=127;$a1++) { for ($a2=0;$a2<=127;$a2++) { $b0=(pack("С",$c1[$i]) & pack("С",$c2[$i])) ^ (pack("С",$a1) & pack("С",$a2)); $b= ~(pack("С",$c1[$i]) ^ pack("С",$a1)); if ($b eq $b0) { if ((pack("C",$c1[$i]) ^ $b eq pack("C",$a1)) && (pack("C",$c2[$i]) ^ $b eq pack("C",$a2))) { print pack("C",$c2[$i]) ^ $b0; }; }; }; }; }; чёта не прокатило
dag Конечно не прокатит! Ведь все наши [мои по крайне мере] первые попытки решить задачу были как раз связаны с решением уравения. Но при этих условиях и данных, которыми мы располагаем это не возможно. Плюс ко всему еще в самом начале Stiver написал, что данный тип шифрования является стойким только когда ключики разные. Что как раз идеально вписывается в условия задачи.
согласен с k0k0s - ведь ксоринг - обладает таким своиством - получить обратный элемент(1 из 3-х) невозможно зная только один. Например даны а b z Код (Text): а b z 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 1 0 Проведем a xor z b xor z и получим с1 и с2 Код (Text): с1 с2 0 0 0 0 1 1 1 1 1 0 1 0 0 1 0 1 А теперь попробуйте восстановить по данным битам исходные данные А те выводы формул, котрые я пытался сделать сводились опять же к тому самому ксорингу. Единственно что можно сдесь будет сделать это при подборе отбрасывать лишнии значения(к примеру значения русских букв).
Мдя... Только что тему увидел, а то б раньше написал... Итак: при гаммировании одной и той же гаммой двух разных текстов получается 2 шифртекста банальный ксор которых полностью исключает гамму. В результате ксора имеем просто ксор двух текстов (до этого тут вроде догадались). Далее. Поскольку один из текстов дополнен символом заполнителем до длины другого, то легкий перебор (128 попыток) этого заполнителя (если он неизвестен) дает читаемый конец второго текста (если длины у них были изначально разные). Далее, по концу текста можно предполагать, какие буквы идут перед ним и параллельно восстанавливать оба текста. А общий метод решения - нужно протягивать наиболее вероятные слова по одному из текстов, пытаясь прочитать то, что получается во втором тексте. Если второй текст начинает читаться, то параллельно восстанавливать по одной букве дальше, чтобы оба текста продолжали читаться. Визуально это легко делается, а вот полностью автоматизировать процесс достаточно сложно. Можно приплести всякие биграммы, 3-граммы для конкретного языка, но вряд ли препод хотел чтобы кто-то так глубоко рыл...
Забыл кто написал: Настоящей безопасности здесь никогда не было. Этот тип шифрования легко вскрывается, даже без компьютера. Его взлом на компьютере занимает несколько секунд. Предположим, что открытый текст использует английский язык. Более того, пусть длина ключа любое небольшое число байт. Ниже описано, как взломать этот шифр: 1. Определим длину ключа с помощью процедуры, известной как подсчет совпадений. Применим операцию XOR к шифротексту, используя в качестве ключа сам шифротекст с различными смещениями, и подсчитаем совпадающие байты. Если величина смещения кратна длине ключа, то совпадет свыше 6 процентов байтов. Если нет, то будут совпадать меньше чем 0.4 процента (считая, что обычный ASCII текст кодируется случайным ключом, для других типов открытых текстов числа будут другими). Это называется показателем совпадений. Минимальное смещение от одного значения, кратного длине ключа, к другому и есть длина ключа. 2. Сместим шифротекст на эту длину и проведем операцию XOR для смещенного и оригинального шифротекстов. Результатом операции будет удаления ключа и получение открытого текста, подвергнутого операции XOR с самим собой, смещенным на длину ключа. Так как в английском языке на один байт приходится 1.3 бита действительной информации, существующая значительная избыточность позволяет определить способ шифрования. Несмотря на это, количество поставщиков программного обеспечения, навязывающих этот игрушечный алгоритм в качестве "почти такого же безопасного как DES", впечатляет. Именно этот алгоритм (с 160-битным повторяющимся "ключом") NSA в конце концов разрешило использовать в цифровых телефонных сотовых сетях для закрытия голоса. XOR может защитить ваши файлы от младшей сестры, но настоящего криптоаналитика задержит лишь на считанные секунды.
В нашем случае, ключ = длинне сообщения !!! =) такчто насчёт этого метода можно расслабиться. Былбы он состоящим из коротких повторяющихся блоков => открыть его нет проблем
Хотя если знать хоть часть предложения то это можно сделать, при условии что он шифрован ключом в ASCII и ключ один и тот же: первый текст: "тест хххххххххххххххххххххххххххх" - знаем начало "тест " (текст все же "xxxx...xxxx", просто мы знаем начало). второй текст "ххххххххххххххххххххххх" - расшируем первые байты (путем ("тест " xor text_1"xxxxx") xor text_2"xxxxx". Дальше мы знаем что слово идет после "тест " и знаем часть ключа: 1. пытаемся додумать продолжение ключа, 2. расшифровываем 1 текст пока не получим более-менее понятное следующее слово и паралельно проверяем расшифруется ли 2 текст, то есть если в первом предложении слово удалось открыть и во втором тоже, значит мы открыли следующую часть ключа (возможно, но не факт). Повторяем пока не удастся открыть все. Все это можно вынести в код: проверяем на расшифрованные слова на допустимость символов (а-я, 0-1 и пр. без кодов типа ↓), проверяем на допустимость последовательности букв (такого быть не может "sdfккк"). Все это не дает гарантии, но попробовать стоит, хотя бы из-за азарта