单表代换加密算法用c语言实现,单表代替密码原理及算法实现

二、由独立试验产生双字母。根据Beker在1982年统计的英文双字母的频数给出了双字母的频率。       统计出的英文双字母的概率最大的30对字母按概率大小排列为:

th    he    in    er    an    re    ed    on    es    st    en    at    to    nt    ha    nd    ou    ea    ng    as    or    ti    is    et    it    ar    te     se    hi    of

只要我们随意统计足够长的英文课文,只要内容不是太特殊,其结果一定和上面的概率基本相同,这也表明双字母在英文课文中出现的概率是基本可预测的,它为密码分析提供了又一方面的依据。

类似的,我们还可以考察英文课文中三字母出现的频率。仍按Beker在1982年统计的结果(样本总数100 360)得到概率最大的20组三字母按概率大小排列为:

the    ing    and    her    ere    ent    tha    nth    was    eth    for    dth    hat    she    ion    his    sth    ers    ver

特别,the出现的频率几乎为ing的3倍。

应当强调指出,在利用统计分析法时,密文量要足够大,否则会加大密码攻击的难度。在实际通信中,除了字母外,还有诸如标点、数字等字符,它们的统计特性也必须考虑进去。数据格式、报头信息对于密码体制的安全有重要意义,在密码分析中也起着重要的作用。

在分析或攻击一份密报时利用英文的下述统计特性很有帮助。

⑴冠词the对英文的统计特性影响很大,它使t,h,th,he和the在单字母、双字母和三字母的统计中都为高概率的元素。

⑵英文单词中以 E,S,D,T 为结尾的超过一半

⑶英文单词中以 T,A,S,W 为起始字母的约占一半

⑷①在分析或攻击密文时应先找突破口,一般来说,先从the a i入手。(能一个字母独立作为单词的只有a、I,而且频率较高时优先考虑a)

②如果有“’”出现,“’”后的一个字母只能是t s l d v中的一个;如果是两个字母,则只能是re ll。(两个不同字母即是re,相同即是ll)

③其它规律:如果四字单词词末有两个相同字母,往往是ll;

以a开头的三字单词只能是and are中的一个;

两个字母的组合中如果出现q*,则*是u(q后几乎总是u);

如果一个单词的开头和结尾是同一个字母,最可能的是:s t d;

两个都是辅音的双字母组合,常含有n或t;io、ou和ea是最常见的双元音字母组;

如果单词的头两个字母都是辅音,则第二个字母最可能是:r、l和h;

如果一个三次以三个辅音结尾,那最常见的是-ght和-tch;

反向双字母组合: er-re, es-se, an-na, it-ti, on-no, en-ne, ot-to,ed-de, st-ts, at-ta, ar-ra, in-ni;

小词的使用频率

1-letter: a,i,o

2-letter: of,to,in,is,it,be,as,at

3-letter: the,and,for,are,but,not,you,all

4-letter: that,with,have,this,will,your,from,they

5-letter: which,would,there

元音字母:a,e,i,o,u

元音后最常见的字母是n,元音前最常见的字母是h

常见的双字母前缀 re co un com il ir up

最常用的三字母后缀 ion ing

最常见词尾 ed es er

【例】

1.攻击例题:

给定密文为GROX CMRYYVLYIC COXN COMBOD WOCCKQOC DY OKMR YDROB DROI YPDOX SXFOXD K MYNO LI VODDSXQ OKMR VODDOB YP DRO KVZRKLOB BOZBOCOXD KXYDROB YXO

攻击的第一步是做出密文字母出现的频次分布表

22e90ba55c5d3be2fff7138b045ac576.png

第二步是根据密文字母的频次统计,确定某些密文字母对应的明文字母可能是单字母频率统计表中的哪些字母。此例中

密文字母           对应的明文字母

O,D,B,V                e,t,r,l

第三步是利用自然语言的文字结合规律进行猜测。D经常出现在词头或词尾,故猜测它与t对应;而P经常在词尾出现而未在词头出现,所以猜测它与明文字母e对应;K单独出现且频率较高,猜测与a对应。

利用双字母、三字母统计特性及元音辅音拼写知识,可猜测如下:

4f4627a1a80f797133ce5bff3e9fde29.png

由此不难猜出:GROX是when,OKMR是each,VODDSXQ是letting,KXYDROB是another,DY是to。

再得到下表:

b7075b4984ae834d60f786af922f1b50.png

再做进一步确定就可确定C,W,I,N,F,Q,Z对应的明文字母。经过整理恢复的明文如下:

when schoolboys send secret messages to each other they often invent a code by letting each letter of the alphaber represent another one.

算法实现

1 #include 2 #include 3 #include 4 using namespacestd;5 const char c[27]={'d','j','k','z','u',6 'x','c','m','l','i','w','b','v','n','o','p',7 'q','a','r','s','g','h',8 'f','t','y','e',' '};9 void encryption(ifstream& fin,ofstream&fout);10 intmain()11 {12 ifstream fin;13 ofstream fout;14 fin.open("file1_1.in");15 if(fin.fail())16 {17 cout<

31 {32 charnext;33 charch;34 inti;35 while(fin.get(next))36 {37 if(next>='a'&&next<='z')38 {39 i=next-'a';40 ch=c[i];41 fout<

44 {45 fout<

50 {51 charch;52 charchout;53 while(fin.get(ch))54 {55 for(int i=0;i<=26;i++)56 {57 if(ch==c[i])58 {59 if(i==26)60 {61 fout<

64 {65 chout=char('a'+i);66 fout<

输入文件file1_1.in

//file1_1.in

we will attack tomorrow morning

输出文件file1_1.out

//file1_1.out

fu flbb dssdkw sovoaaof voanlnc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值