您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 实验3-移位密码分析实验
实验3-移位密码分析实验班级:信息安全一、实验原理一篇包含字符的英文文章,其各ASCII码字符出现,都有一定的频率,出现较高频率的两个字符是''(空格)和'e',而且它们的ASCII码分别是32和101,差值是69。既然凯撒密码利用的是单表替换的一种简单加密算法,所以,我们的主角,''和'e',在解密后,依然会保持相同的ASCII码差值,69。|c1-c2|=|'e'-''|=|101-32|=69|m1-m2|=|((c1+k)mod256)-((c2+k)mod256)|=|c1-c2|=|'e'-''|=69现在可以得到破解凯撒密码的原理了,我们统计一片经过凯撒加密的密文字符信息,在出现频率较高的字符里面寻找差值是69的2个字符,这两个必定是''和'e'字符的加密字符,计算偏移量(既密钥key),通过解密运算,还原出明文。二、程序设计流程说明:移位密码算法破解字母统计分析出现频率最高的字母输入密文解密输出结果结束源代码:#includestdio.hvoidanalyze(char*c);voiddecypher(char*c,char*hashmap,inta,intb,intd);voidcreateHash(char*c,inta,intb,intd);charalphabet[]=abcdefghijklmnopqrstuvwxyz,.!;intmain(){charch1[10000];charhash[29];printf(Inputparagragh:\n);gets(ch1);analyze(ch1);printf(\nAfterdecyphered:\n);createHash(hash,7,3,29);decypher(ch1,hash,7,3,29);printf(\n%s\n,ch1);return1;}voidanalyze(char*c)//统计字母出现{inta[26]={0};inti=0,j;while(c[i]!='\0'){if(c[i]!='.'||c[i]!='!'||c[i]!=',')a[c[i]-'a']++;printf(%d\t,i++);}for(j=0;j26;j++){printf(%c:%d\n,j+'a',a[j]);}}voiddecypher(char*c,char*hashmap,inta,intb,intd)//通过密文直接hash到明文,进行解密{inti=0;intchar_pos;//recordthecaractor'spositionwhile(c[i]!='\0'){char_pos=c[i]-'a';//printf(char_pos:%d\n,char_pos);if(c[i]!=''){printf(%c,hashmap[char_pos]);}else{printf();}i++;}}voidcreateHash(char*c,inta,intb,intd)//由于f(p)是满足双射关系的,即两两对应,可以将明暗文对应关系放在Hash表中{inti;charencode[29];for(i=0;i29;i++){encode[i]=alphabet[(a*i+b)%d];printf(%c,encode[i]);}for(i=0;i29;i++){c[encode[i]-'a']=alphabet[i];}printf(\n%s\n,alphabet);}三、实验过程1.输入密文2.统计字符,得出结果结果:密文xultpaajcxitltlxaarpjhtiwtgxktghidhipxciwtvgtpilpitghlxiwiwtxgqadds所对应的明文为ifweallunitewewillcausetheriverstostainthegreatwaterswiththeirblood
本文标题:实验3-移位密码分析实验
链接地址:https://www.777doc.com/doc-5058857 .html