使用重复值

时间:2015-11-05 16:21:29

标签: php dictionary encryption cryptography frequency-analysis

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

文本文件:

  

cryptool(cryptool版本系列1.x的起始示例)

     

cryptool是一个全面的免费教育计划   密码学和密码分析提供广泛的在线帮助和许多   可视化效果。

     

这是一个文本文件,旨在帮助您创建第一个文本文件   使用cryptool的步骤。

     

1)作为第一步,建议您在线阅读   帮助,这将提供对所有可用功能的有用监督   在这个申请中。在线帮助的起始页面可以是   通过菜单访问" help - >起始页"在右上方   屏幕或使用搜索关键字"起始页"在指数内   在线帮助。按f1开始在任何地方的在线帮助   cryptool。

     

2)可能的下一步是用caesar加密文件   算法。这可以通过菜单" crypt / decrypt - >完成。对称   (经典)"

     

3)在线提供了几个示例(教程)   帮助,提供了一种简单的方法来了解密码学。   这些例子可以通过菜单找到" help - >场景   (教程)"

     

4)您还可以通过以下方式发展您的知识:    - 浏览菜单。您可以在任何选定的菜单项上按f1以获取更多信息。    - 阅读随附的自述文件(参见菜单" help - > readme")。    - 查看附带的彩色演示文稿(此演示文稿可通过多种方式找到:例如,在此应用程序的" help"菜单中,或者   通过"文档"在"开始"的页面   网上帮助)。    - 查看网页www.cryptool.org。

     

2010年7月加密工作组

加密文件:

  

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 de t 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 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)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 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 nly 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。 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。   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)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)&#34 ;. 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 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

1 个答案:

答案 0 :(得分:2)

  

有些情况不会改变,但我会稍后手动完成。

所以,如果你准备好稍后手动修复smth,并且为了避免重新替换的问题(意味着替换&#34中的所有词汇;一跳")你可以使用php函数{ {1}}(http://php.net/manual/en/function.strtr.php)并稍微更改您的代码,如下所示:

strtr

输出将是:

//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);

比#34; jjdebdda"好一点:),但是,如你所料,仍然有一些冲突。