首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过具有重复值的字典运行数组

通过具有重复值的字典运行数组
EN

Stack Overflow用户
提问于 2015-11-05 16:21:29
回答 1查看 154关注 0票数 0

因此,我有两个文件,第一个是文本文件,第二个是第一个文件的加密:

文本文件:

密码工具(密码工具版本家族1.x的起始示例) 密码工具是一个关于密码学和密码分析的全面免费教育项目,提供广泛的在线帮助和许多可视化。 这是一个文本文件,创建的目的是帮助您使用密码工具执行第一步。 1)作为第一步,建议您阅读所包含的在线帮助,这将为本应用程序中的所有可用功能提供有用的监督。联机帮助的起始页可以通过屏幕右上角的“帮助->起始页”菜单或使用联机帮助索引中的搜索关键字“起始页”访问。按f1开始在线帮助随处可见的密码工具。 2)下一步可能是用凯撒算法加密文件。这可以通过菜单“加密/解密->对称(经典)”来实现。 3)在在线帮助中提供了几个示例(教程),为理解密码学提供了一种简单的方法。这些示例可以通过菜单“帮助->场景(教程)”找到。 4)你也可以通过:-浏览菜单来发展你的知识。您可以按下f1在任何选定的菜单项,以获得进一步的信息。-读取包含的自述文件(请参阅菜单"help ->自述“)。-查看包含的五颜六色的演示文稿(此演示文稿可通过几种方式找到:例如,在本应用程序的“帮助”菜单中,或通过在线帮助的“开始”页面中的“文档”部分)。-查看网页www.cryptool.org。 2010年7月密码工具小组

加密文件:

ncjaezzw (delcetyr pilxawp qzc特别是ncjaezzw gpcdtzy qlxtwj 1.i) ncjaezzw td l nzxacpspydtgp qcpp pofnletzylw aczrclx lmzfe ncjaezrclasj lyo ncjaelylwjdtd zqqpctyr piepydtgp zywtyp spwa lyo gtdflwtkletzyd. =. ( 1) td qtcde depa te td cpnzxxpyopo jzf cplo esp tynwfopo zywtyp spwa,estd htww aczgtop l fdpqfw zgpcdtrse zq lww lgltwlmwp qfynetzyd htesty estd laawtnletzy。esp delcetyr alrp zq esp zywtyp spwa mp lnnpddpo gtl esp xpyf "spwa -> delcetyr alrp“le esp 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) hzfwo mp ez pyncjae l qtwp htes esp nlpdlc lwrzctesx.estd 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 mp gtl esp xpyf "spwa -> dnpylctzd (efezctlwd)“。 ( 4) jzf,lwdz opgpwza jzfc vyzhwporp mj:- ylgtrletyr esczfrs esp xpyfd.q1 le lyj dpwpnepo xpyf tepx ez rpe qfcespc tyqzcxletzy.- cplotyr (尤指tynwfopo cploxp qtwp ) (dpp esp xpyf "spwa -> cploxp")。- gtphtyr (尤指tynwfopo nzwzcqfw acpdpyeletzy 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 (尤指hpmalrp hhh.ncjaezzw.zcr ) ufwj 2010特别是ncjaezzw eplx

我正在计算两个文件中的字母锁定,创建一个字典,这样我就可以回到加密的文件中,并将大多数字母更改为正确的,有些不会被更改,但我稍后会手动进行。问题是,我认为一些字母有相同的数量,它改变同一个字母不止一次。到目前为止,这是我的代码,问题确实存在于foreach循环中,但我没有设法修复它。也许我可以使用标志,但我不知道如何在一个预先循环中做到这一点。

代码语言:javascript
复制
  //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);

输出字符串是,wich是错的,xD:

jjdebdda (wbdjbbdj ebdbeae zdj bwe jjdebdda jejwbdd zdbbad 1.b) jjdebdda bw d jdbejewedwbje zjee edzjdbbddda ejdjjdb dbdzb jjdebdjjdewd jjdebdddadwbw dzzejbdj ebbedwbje ddd bw d jbwzdabzdbbddw。bwbw bw d bebb zbae,jjedbed djdej bd weae bdje ddzj zbjwb wbbw wbbw jjdebdda。( 1) dw d zbjwb wbbwbd jejdbbedded 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 bwe bedz "weae -> wbdjbbdj edje“db bwe bwe bde bde jbjwb jbd dj zwbdj bwe jdd jedwdjd "wbdjbbdj bwe bddeb dz ddabde weae。电子珠宝z1 bd bwe ddabde weae ejejdwweje ejejdwweje。( 2) d edwwbbae debb wdzad是bd edjjdeb d zbae wbbw bwe jdewdj dajdjbbwb。bwbw jdd是ddde jbd bwe bedz "jjdeb/dejjdeb -> wdbbebjbj (jadwwbj)“。3) bweje dje wejejda ebdbeaew (bzbdjbdaw) edwd bwe ddabde weae wwbjw ejdjbde dd edwd wdd wdd dd zddejwbdddbdj dz jjdebdadjd.bwewe ebdbeaew jdd是zdzdd jdd bwe be "weae -> wjeddjbdw (bzbdjbdaw)“。4) ddz jdd dawd dejeade ddzj jddwaedje bd:- ddjbjdbbdj bwjdzjw bwe bedzw。ddz jdd电子珠宝z1 db ddd weaejbed bbeb bbeb zzjbwej .- jeddbdj bwe bdjazded jeddbe zbae (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.2010年bwe jjdebdda bedb

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-05 17:07:38

有些是不会更改的,但我稍后会手动做。

因此,如果您准备好稍后手动修复smth,并且为了避免重新替换(意思是替换“一跳”中的所有词汇表),您可以使用php函数strtr (http://php.net/manual/en/function.strtr.php)并稍微修改代码,如下所示:

代码语言:javascript
复制
//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);

产出如下:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33549697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档