За последние 24 часа нас посетили 17552 программиста и 1719 роботов. Сейчас ищут 1649 программистов ...

Рождественский конкурс GCHQ 2024

Тема в разделе "Беседы", создана пользователем Vladimir Kheifets, 16 дек 2024.

  1. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    439
    Симпатии:
    84
    Адрес:
    Бавария, Германия
    Добрый день!

    11 декабря был опубликован "Рождественский конкурс GCHQ 2024"
    (Government Communications Headquarters)
    https://www.gchq.gov.uk/news/gchq-christmas-challenge-2024
    Своё решение покажу позже.

    Удачи!
     
    artoodetoo нравится это.
  2. bimply

    bimply Активный пользователь

    С нами с:
    13 авг 2012
    Сообщения:
    444
    Симпатии:
    13
    И как делать? Перебором если есть английский словарик? Проверяем каждое слово на маску и если подходит другие слова на остатки маски?
     
  3. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    439
    Симпатии:
    84
    Адрес:
    Бавария, Германия
    Они дали подсказку первые два слова:
    PERHAPS READING
    зашифрованы так:
    ISKGWIM KSWEBDU
    Из этого можно начать подбирать ключ шифрования и затем сделать предварительную расшифровку
    PHP:
    1. <?
    2. $str1 = "PERHAPS READING the start of this substitution cipher will help you solve it.";
    3. $str2 = "ISKGWIM KSWEBDU BN DFN LBIGSKSE BM IKBCWKBQX W QSWEBDU BDEBLWNBFD NF XFO";
    4. $str2 .= "MFQPBDU NGBM WECBNNSEQX ESPBFOM BDBNBWQQX ODKSWEWAQS CSMMWUS";
    5. echo "<b>Зашифрованный текст:</b><br>$str2<br>";
    6.  
    7. $str1W = explode(" ", $str1 );
    8. $str2W = explode(" ", $str2 );
    9.  
    10. echo "<pre>";
    11. $alpha = array_flip(range('A', 'Z'));
    12.  
    13. foreach($alpha as $key => $val ){
    14. $buf[$key] = "-";
    15. }
    16.  
    17. for($i=0; $i<2; $i++){
    18.     $ch1 = str_split($str1W[$i]);
    19.     $ch2 = str_split($str2W[$i]);
    20.     foreach($ch1 as $key=>$val){
    21.         $val2 = $ch2[$key];
    22.         $buf[$val2] = $val;
    23.     }
    24. }
    25.  
    26. echo "Kлюч расшифровки:";
    27.  
    28. print_r($buf);
    29.  
    30.  
    31. foreach($str2W as $key => $val){
    32.     $ch2 = str_split($val);
    33.     $deciphered[$key] = "";
    34.     foreach($ch2 as $v){
    35.         $deciphered[$key] .= $buf[$v];
    36.     }
    37. }
    38.  
    39. echo "<b>Расшифрованный текст:</b><br>",implode(" ", $deciphered);
    40. /*
    41. Зашифрованный текст:
    42.  
    43. ISKGWIM KSWEBDU BN DFN LBIGSKSE BM IKBCWKBQX W QSWEBDU BDEBLWNBFD NF XFOMFQPBDU NGBM WECBNNSEQX ESPBFOM BDBNBWQQX ODKSWEWAQS CSMMWUS
    44.  
    45. Kлюч шифровaния : Array
    46. (
    47.     [A] => -
    48.     [B] => I
    49.     [C] => -
    50.     [D] => N
    51.     [E] => D
    52.     [F] => -
    53.     [G] => H
    54.     [H] => -
    55.     [I] => P
    56.     [J] => -
    57.     [K] => R
    58.     [L] => -
    59.     [M] => S
    60.     [N] => -
    61.     [O] => -
    62.     [P] => -
    63.     [Q] => -
    64.     [R] => -
    65.     [S] => E
    66.     [T] => -
    67.     [U] => G
    68.     [V] => -
    69.     [W] => A
    70.     [X] => -
    71.     [Y] => -
    72.     [Z] => -
    73. )
    74.  
    75. Расшифрованный текст:
    76.  
    77. PERHAPS READING I- N-- -IPHERED IS PRI-ARI-- A -EADING INDI-A-I-N -- ---S---ING -HIS AD-I--ED-- DE-I--S INI-IA--- -NREADA--E -ESSAGE
    78. */
    Затем изучаем расшифрованный текст, например,
    Последее слово
    CSMMWUS
    расшифровано как
    -ESSAGE, предполагаем, что это MESSAGE
    и дополняем ключ шифрования
    $buf["C"] = "M";
    Повторно запускаем скрипт и смотрим результат и.т.д
    Я так нашел ключ шифрования:
    PHP:
    1. (
    2.     [A] => B
    3.     [B] => I
    4.     [C] => M
    5.     [D] => N
    6.     [E] => D
    7.     [F] => O
    8.     [G] => H
    9.     [H] => -
    10.     [I] => P
    11.     [J] => -
    12.     [K] => R
    13.     [L] => C
    14.     [M] => S
    15.     [N] => T
    16.     [O] => U
    17.     [P] => V
    18.     [Q] => L
    19.     [R] => -
    20.     [S] => E
    21.     [T] => -
    22.     [U] => G
    23.     [V] => -
    24.     [W] => A
    25.     [X] => Y
    26.     [Y] => -
    27.     [Z] => -
    28. )
    Которым, так расшифровал текст
     
  4. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    439
    Симпатии:
    84
    Адрес:
    Бавария, Германия
    Этот шифр та ещё заноза...

    Хотелось бы найти метод шифрования без интутивного додумывания перестновок.
    В начале, в предыдущей реализации, попытался привязаться к алфавиту и проверял закономерности перестановок.
    Искал сдвиги, по принципу шифра Цезаря и.т.п, но ничего не нашёл.
    От алфавита отказался вообще, но для вычисления перестановок взял не только первые два слова из
    PERHAPS READING the start of this substitution cipher will help you solve it, а весь текст.

    Буду благодарен, если сможете предложить свои решения.
    Здесь последний вариант
    PHP:
    1. <?
    2. echo "<pre>";
    3.  
    4. $str1 = "PERHAPS READING the start of this substitution cipher will help you solve it";
    5.  
    6. $str2 = "ISKGWIM KSWEBDU BN DFN LBIGSKSE BM IKBCWKBQX W QSWEBDU BDEBLWNBFD NF XFO";
    7. $str2 .= "MFQPBDU NGBM WECBNNSEQX ESPBFOM BDBNBWQQX ODKSWEWAQS CSMMWUS";
    8.  
    9. echo "<b>Зашифрованный текст:</b><br>$str2<br>";
    10.  
    11. $S2 = array_unique(str_split(str_replace(" ","",$str2)));
    12.  
    13. array_pop($S1);
    14.  
    15. $buf = array_combine($S2, $S1);
    16.  
    17. echo "Kлюч шифрования:";
    18.  
    19. print_r($buf);
    20.  
    21. echo "<b>Step 1. Расшифрованный текст:</b><br>", decipherer($str2, $buf);
    22.  
    23. //Интуитивная замена перестановок в ключе шифрования
    24.  
    25. $buf["A"] = "B";
    26. $buf["C"] = "M";
    27. $buf["L"] = "C";
    28. $buf["Q"] = "L";
    29. $buf["X"] = "Y";
    30. $buf["O"] = "U";
    31.  
    32.  
    33. echo "<br>Дополненный ключ шифрования: ";
    34. print_r($buf);
    35.  
    36. echo "<b>Step 2. Расшифрованный текст:</b><br>", decipherer($str2, $buf);
    37. echo "<hr>";
    38.  
    39. ##########################################################################
    40. function  decipherer($str, $buf){
    41.     $ch = str_split($str);
    42.     $deciphered = "";
    43.     foreach($ch as $v)
    44.     {
    45.         if($v == " ")
    46.             $deciphered .= " ";
    47.         else
    48.             $deciphered .= $buf[$v];
    49.     }
    50.     return $deciphered;
    51. }
    52. ##########################################################################
    53. /*
    54. Зашифрованный текст:
    55.  
    56. ISKGWIM KSWEBDU BN DFN LBIGSKSE BM IKBCWKBQX W QSWEBDU BDEBLWNBFD NF XFOMFQPBDU NGBM WECBNNSEQX ESPBFOM BDBNBWQQX ODKSWEWAQS CSMMWUS
    57.  
    58. Kлюч шифрования:Array
    59. (
    60.     [I] => P
    61.     [S] => E
    62.     [K] => R
    63.     [G] => H
    64.     [W] => A
    65.     [M] => S
    66.     [E] => D
    67.     [B] => I
    68.     [D] => N
    69.     [U] => G
    70.     [N] => T
    71.     [F] => O
    72.     [L] => F
    73.     [C] => U
    74.     [Q] => B
    75.     [X] => C
    76.     [O] => W
    77.     [P] => L
    78.     [A] => Y
    79. )
    80.  
    81. Step 1. Расшифрованный текст:
    82.  
    83. PERHAPS READING IT NOT FIPHERED IS PRIUARIBC A BEADING INDIFATION TO COWSOBLING THIS ADUITTEDBC DELIOWS INITIABBC WNREADAYBE UESSAGE
    84.  
    85. Дополненный ключ шифрования: Array
    86. (
    87.     [I] => P
    88.     [S] => E
    89.     [K] => R
    90.     [G] => H
    91.     [W] => A
    92.     [M] => S
    93.     [E] => D
    94.     [B] => I
    95.     [D] => N
    96.     [U] => G
    97.     [N] => T
    98.     [F] => O
    99.     [L] => C
    100.     [C] => M
    101.     [Q] => L
    102.     [X] => Y
    103.     [O] => U
    104.     [P] => L
    105.     [A] => Y
    106. )
    107.  
    108. Step 2. Расшифрованный текст:
    109.  
    110. PERHAPS READING IT NOT CIPHERED IS PRIMARILY A LEADING INDICATION TO YOUSOLLING THIS ADMITTEDLY DELIOUS INITIALLY UNREADABLE MESSAGE
    111.  
    112. Перевод от Google:
    113.  
    114. ВОЗМОЖНО, ПРОЧТЕНИЕ НЕ ЗАШИФРОВАННОГО СООБЩЕНИЯ — ПЕРВАЯ ПОДСКАЗКА К РАЗРЕШЕНИЮ ЭТОГО ЗАЯВЛЕННОГО, ИЗНАЧАЛЬНО НЕЧИТАЕМОГО СООБЩЕНИЯ.
    115. */
    Удачи!