0

Таким образом, у меня есть два файла, первый представляет собой текстовый файл, а второй является шифрование первого файла:Запуск массива через словарь с повторяющимися значениями

текстовый файл:

cryptool (начальный пример для семейства версий криптолопа 1.x)

cryptool - это бесплатная бесплатная образовательная программа о криптографии и криптоанализе, предлагающая обширный onlin e help и многие визуализации.

это текстовый файл, созданный для того, чтобы помочь вам сделать первые шаги с помощью cryptool.

1) в качестве первого шага рекомендуется прочитать прилагаемую справочную информацию , это обеспечит полезный надзор за всеми доступными функциями в этом приложении. стартовой страницей онлайн-справки может быть доступ через меню «Справка -> стартовая страница» в верхнем правом углу экрана или с помощью ключевого слова поиска «стартовая страница» в индексе онлайн-справку. нажмите f1, чтобы начать онлайн-помощь всюду в cryptool.

2) возможным следующим шагом было бы зашифровать файл с помощью алгоритма caesar . это можно сделать через меню «crypt/decrypt -> симметричный (классический)».

3) есть несколько примеров (руководств), предоставляемых в онлайн-справочной системе , которые обеспечивают простой способ получить понимание криптологии. Эти примеры можно найти в меню «Справка -> сценарии (учебники)».

4) вы также можете развить свои знания: - перемещение по меню. вы можете нажать f1 в любом выбранном пункте меню, чтобы получить дополнительную информацию. - чтение прилагаемого файла readme (см. Меню «help -> readme»). - просмотр красочной презентации (эта презентация может быть найдена несколькими способами: например, в меню «Справка» этого приложения или через раздел «документация», который находится на странице «Начало» справочной системы ). - просмотр веб-страницы www.cryptool.org.

Июль 2010 cryptool команда

зашифрованный файл:

ncjaezzw (delcetyr pilxawp qzc особ ncjaezzw gpcdtzy qlxtwj 1.I)

ncjaezzw тд л nzxacpspydtgp qcpp pofnletzylw aczrclx lmzfe ncjaezrclasj lyo ncjaelylwjdtd zqqpctyr piepydtgp zywtyp spwa lyo xlyj gtdflwtkletzyd.

estd td l epie qtwp, ncplepo ty zcopc ez spwa jzf ez xlvp jzfc qtcde depad htes ncjaezzw.

1) Л.Д. л qtcde DEPA того тд cpnzxxpyopo jzf cplo особ tynwfopo zywtyp spwa, ESTD htww aczgtop л fdpqfw zgpcdtrse ZQ LWW lgltwlmwp qfynetzyd htesty ESTD laawtnletzy. особ delcetyr alrp ZQ особ zywtyp spwa олько пл lnnpddpo GTL особ xpyf "spwa -> delcetyr alrp" ль особы Eza ctrse ZQ особ dncppy гс fdtyr особы dplcns vpjhzco "delcetyr alrp" htesty особы tyopi ZQ особ zywtyp spwa. acpdd q1 ez delce esp zywtyp spwa pgpcjhspcp ty ncjaezzw.

2) l azddtmwp ypie depa hzfwo mp ez pyncjae l qtwp htes esp nlpdlc lwrzctesx. estd nly mp ozyp gtl esp xpyf "ncjae/opncjae -> djxxpectn (nwlddtn)".

3) espcp LCP dpgpclw pilxawpd (efezctlwd) aczgtopo htesty особ zywtyp spwa hstns aczgtop ют pldj HLJ эз RLTY ют fyopcdelyotyr ZQ ncjaezwzrj. espdp pilxawpd nly mp qzfyo gtl esp xpyf "spwa -> dnpylctzd (efezctlwd)".

4) jzf nly lwdz opgpwza jzfc vyzhwporp mj: - ylgtrletyr esczfrs esp xpyfd. jzf nly acpdd q1 le lyj dpwpnepo xpyf tepx ez rpe qfcespc tyqzcxletzy. - cplotyr esp tynwfopo cploxp qtwp (dpp esp xpyf "spwa -> cploxp"). - gtphtyr особ tynwfopo nzwzcqfw acpdpyeletzy (ESTD acpdpyeletzy олько т.пло qzfyo ZY dpgpclw hljd: P.R. ти особ "spwa" xpyf ZQ ESTD laawtnletzy, ZC GTL особ "oznfxpyeletzy" dpnetzy qzfyo ль особы "delcetyr" alrp ZQ особ zywtyp spwa). - gtphtyr esp hpmalrp hhh.ncjaezzw.zcr.

ufwj 2010 особ ncjaezzw eplx

Im подсчитывая письмо вхождений в обоих файлах, создавая словарь, так что я могу вернуться в зашифрованный файл и изменить большинство писем правильными, некоторые не будете но я сделаю это вручную позже. Проблема в том, что я думаю, что некоторые буквы имеют одинаковое количество осколков, изменяя одну и ту же букву более одного раза. Heres мой код до сих пор, проблема уверенно в петлях foreach, но им не удается ее исправить. Возможно, я могу использовать флаги, но я понятия не имею, как это сделать в цикле foreach.

//gets string from both text files 
     $reference = file_get_contents('reference_file.txt', true); 
     $encrypted = file_get_contents('encrypted_file.txt', true); 

     //Uses regex to take away all the characters wich are not letters 
     $azreference = preg_replace("/[^a-z]+/", "", $reference); 
     $azencrypted = preg_replace("/[^a-z]+/", "", $encrypted); 




    //Counts number of letter ocurrences and makes a string: "Char => Ocurrences" 
      $refarray1 = array_count_values(str_split($azreference, '1')); 
      $refarray2 = array_count_values(str_split($azencrypted, '1')); 

      foreach ($refarray1 as $key => $val) { 
       foreach ($refarray2 as $key2 => $val2) { 
        if ($val == $val2){ 
         $encrypted = str_replace($key2, $key, $encrypted); // (replaces $key2 for $key) 
        } 
       } 
      } 
print_r($encrypted); 

Выходная строка является, своего рода которым является неправильным XD:

jjdebdda (wbdjbbdj ebdbeae ZDJ BWE jjdebdda jejwbdd zdbbad 1.b) jjdebdda м.т. д jdbejewedwbje zjee edzjdbbddda ejdjjdb dbdzb jjdebdjjdewd ddd jjdebdddadwbw dzzejbdj ebbedwbje ddabde weae ddd bddd jbwzdabzdbbddw. bwbw bw d bebb zbae, jjedbed bd djdej bd weae ddz bd bdje ddzj zbjwb wbeew wbbw jjdebdda. 1) dw d zbjwb wbee bb bw jejdbbedded ddz jedd bwe bdjazded ddabde weae, bwbw wbaa ejdjbde d zwezza djejwbjwb dz daa djdbadbae zzdjbbddw wbbwbd bwbw deeabjdbbdd. С wbdjbbdj эдж дг С ddabde weae JDD быть djjewwed JBD С bedz "weae -> wbdjbbdj эдже" дб С BDE jbjwb дг С wjjeed диджи zwbdj С wedjjw jedwdjd "wbdjbbdj эдж" wbbwbd С bddeb дг С ddabde weae. ejeww z1 bd wbdjb bwe ddabde weae ejejdwweje bd jjdebdda. 2) d edwwbbae debb wbee wdzad be bd edjjdeb d zbae wbbw bwe jdewdj dajdjbbwb. bwbw jdd be ddde jbd bwe bedz "jjdeb/dejjdeb -> wdbbebjbj (jadwwbj)".3) bweje dje wejejda ebdbeaew (bzbdjbdaw) ejdjbded wbbwbd bwe ddabde weae wwbjw ejdjbde dd edwd wdd bd jdbd dd zddejwbdddbdj dz jjdebdadjd. bwewe ebdbeaew jdd be zdzdd jbd bwe bedz "weae -> wjeddjbdw (bzbdjbdaw)". 4) ddz jdd dawd dejeade ddzj jddwaedje bd: - ddjbjdbbdj bwjdzjw bwe bedzw. ddz jdd ejeww z1 db ddd weaejbed bedz bbeb bd jeb zzjbwej bdzdjbdbbdd. - jeddbdj bwe bdjazded jeddbe zbae (wee bwe bedz "weae -> jeddbe"). - jbewbdj Bwe bdjazded jdadjzza ejewedbdbbdd (bwbw ejewedbdbbdd JDD будет zdzdd дд wejejda wddw: "weae" E.J. шд BWE bedz дг bwbw deeabjdbbdd, ди-джей JBD BWE "ddjzbedbdbbdd" wejbbdd zdzdd дБ BWE "wbdjbbdj" эдж DZ BWE ddabde weae). - jbewbdj bwe webedje www.jjdebdda.djj. zzad 2010 СМВ jjdebdda bedb

+2

Как насчет замены символов их прописными буквами? В настоящее время вы меняете несколько символов несколько раз, поэтому в итоге вы получаете подмножество алфавита. То есть если вы измените a на z и уже есть z в алфавите, в котором вы столкнулись с проблемой. –

+0

thats exactilly моя проблема, как я могу это контролировать? –

+0

Мне казалось, что я поднял решение в первом предложении? Или это решение не понятно? В итоге у вас будет весь текст в верхнем регистре (который вы, конечно, можете преобразовать обратно в нижний регистр, когда у вас есть решение). –

ответ

2

некоторые обыкновение быть изменены, но я сделаю это позже вручную.

Итак, если вы готовы исправить л позже вручную, и для того, чтобы избежать проблем повторной замены (то есть заменить весь словарный запас в «один переходе»), вы можете использовать функцию PHP strtr (http://php.net/manual/en/function.strtr.php) и изменить свой код только немного, как следующее:

//gets string from both text files 
     $reference = file_get_contents('reference_file.txt', true); 
     $encrypted = file_get_contents('encrypted_file.txt', true); 

     //Uses regex to take away all the characters wich are not letters 
     $azreference = preg_replace("/[^a-z]+/", "", $reference); 
     $azencrypted = preg_replace("/[^a-z]+/", "", $encrypted); 




    //Counts number of letter ocurrences and makes a string: "Char => Ocurrences" 
      $refarray1 = array_count_values(str_split($azreference, '1')); 
      $refarray2 = array_count_values(str_split($azencrypted, '1')); 

$replacement = array(); 

foreach ($refarray1 as $key => $val) { 
    foreach ($refarray2 as $key2 => $val2) { 
     if ($val == $val2){ 
      $replacement[$key2] = $key; 
     } 
    } 
} 

$encrypted = strtr($encrypted, $replacement); 
print_r($encrypted); 

выход будет:

cryptnnl (stnrting exnmple fnr the cryptnnl versinn fnmily 1.x) 

    cryptnnl is n cnmprehensive free educntinnnl prngrnm nbnut cryptngrnphy nnd cryptnnnlysis nffering extensive nnline help nnd mnny visunlijntinns. 

    this is n text file, crented in nrder tn help ynu tn mnke ynur first steps with cryptnnl. 

    1) ns n first step it is recnmmended ynu rend the included nnline help, this will prnvide n useful nversight nf nll nvnilnble functinns within this npplicntinn. the stnrting pnge nf the nnline help cnn be nccessed vin the menu "help -> stnrting pnge" nt the tnp right nf the screen nr using the senrch keywnrd "stnrting pnge" within the index nf the nnline help. press f1 tn stnrt the nnline help everywhere in cryptnnl. 

    2) n pnssible next step wnuld be tn encrypt n file with the cnesnr nlgnrithm. this cnn be dnne vin the menu "crypt/decrypt -> symmetric (clnssic)". 

    3) there nre severnl exnmples (tutnrinls) prnvided within the nnline help which prnvide nn ensy wny tn gnin nn understnnding nf cryptnlngy. these exnmples cnn be fnund vin the menu "help -> scennrins (tutnrinls)". 

    4) ynu cnn nlsn develnp ynur knnwledge by: - nnvignting thrnugh the menus. ynu cnn press f1 nt nny selected menu item tn get further infnrmntinn. - rending the included rendme file (see the menu "help -> rendme"). - viewing the included cnlnrful presentntinn (this presentntinn cnn be fnund nn severnl wnys: e.g. in the "help" menu nf this npplicntinn, nr vin the "dncumentntinn" sectinn fnund nt the "stnrting" pnge nf the nnline help). - viewing the webpnge www.cryptnnl.nrg. 

    july 2010 the cryptnnl tenmi 

который немного лучше, чем «jjdebdda» :), но, как вы ожидат ted, все еще имеет некоторые столкновения.