Запуск массива через словарь с повторяющимися значениями

Итак, у меня есть два файла, первый текстовый файл, а второй шифрование первого файла:

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

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

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

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

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

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

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

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

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

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

ncjaezzw (delcetyr pilxawp qzc esp ncjaezzw gpcdtzy qlxtwj 1.i)

ncjaezzw td l 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) ld l qtcde depa te td cpnzxxpyopo jzf cplo esp tynwfopo zywtyp
spwa, estd htww aczgtop l fdpqfw zgpcdtrse zq lww lgltwlmwp qfynetzyd
Скорее всего. esp delcetyr alrp zq esp zywtyp spwa nly mp
lnnpddpo gtl esp xpyf «spwa -> delcetyr alrp» le esp eza ctrse zq esp
dncppy zc fdtyr esp dplcns vpjhzco «delcetyr alrp» htesty esp tyopi zq
esp zywtyp spwa. acpdd q1 ez delce esp zywtyp spwa pgpcjhspcp ty
ncjaezzw.

2) lzddtmwp 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 esp zywtyp
spwa hstns aczgtop ly pldj hlj ez rlty ly 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 только acpdd q1 le lyj dpwpnepo xpyf tepx ez rpe qfcespc tyqzcxletzy.
— cplotyr esp tynwfopo cploxp qtwp (dpp esp xpyf «spwa -> cploxp»).
— gtphtyr esp tynwfopo nzwzcqfw acpdpyeletzy (estd acpdpyeletzy nly mp qzfyo zy dpgpclw hljd: p.r. ty esp «spwa» xpyf zq estd laawtnletzy, zc
gtl esp «oznfxpyeletzy» dpnetzy qzfyo le esp «delcetyr» alrp zq esp
zywtyp spwa).
— gtphtyr esp hpmalrp hhh.ncjaezzw.zcr.

UFWJ 2010 esp ncjaezzw eplx

Я рассчитываю вхождения букв в обоих файлах, создавая словарь, чтобы я мог вернуться в зашифрованный файл и заменить большинство букв на правильные, некоторые не будут изменены, но я сделаю это позже вручную.
Проблема, я думаю, в том, что некоторые буквы имеют одинаковое количество вхождений, это означает, что одна и та же буква меняется более одного раза.
Вот мой код, проблема, конечно, в циклах 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 bw d jdbejewedwbje zjee edzjdbbddda ejdjjdb dbdzb
jjdebdjjdewd ddd jjdebdddadwbw dzzejbdj ebbedwbje ddabde weae ddd bddd
jbwzdabzdbbddw. толстушки, толстушки, толстушки, мужики, подростки, бд, диджеи, бд вее, ддз бд
bdje ddzj zbjwb wbeew wbbw jjdebdda. 1) dw d zbjwb wbee bb bw
djzbedded ddz jedd bwe bdjazded ddabde weae, bwbw wbaa ejdjbde d
zwezza djejwbjwb dz daa djdbadbae zzdjbbddw wbbwbd bwbw deeabjdbbdd.
bwe wbdjbbdj edje dz bwe ddabde weae jdd be djjewwed jbd bwe bedz
«weae -> wbdjbbdj edje» db bwe bde jbjwb dz bwe wjjeed dj zwbdj bwe
wedjjw jedwdjd «wbdjbbdj edje» wbbwbd bwe bddeb dz bwe ddabde weae.
ejeww z1 bd wbdjb bwe ddabde weae ejejdwweje bd jjdebdda. 2) г
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. ддз ддд ejeww z1 дб ддд weaejbed bedz
bbeb bd jeb zzjbwej bdzdjbdbbdd. — jeddbdj bwe bjjazded jeddbe zbae
(Wee Bwe Bedz «Weae -> Jeddbe»). — jbewbdj bwe bdjazded jdadjzza
ejewedbdbbdd (bwbw ejewedbdbbdd jdd be zdzdd dd wejejda wddw: e.j. bd
bwe «weae» bedz dz bwbw deeabjdbbdd, dj jbd bwe «ddjzbedbdbbdd» wejbbdd zdzdd db bwe «wbdjbbdj» edje dz bwe ddabde weae). — jbewbdj
bwe webedje www.jjdebdda.djj. zzad 2010 bwe jjdebdda bedb

0

Решение

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

Итак, если вы готовы исправить что-то позднее вручную, и чтобы избежать проблемы повторной замены (то есть заменить весь словарь в «одном прыжке»), вы можете использовать функцию 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» :), но, как вы ожидали, все еще имеет некоторые коллизии.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]