实现单表代换加密并对其攻击.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实现单表代换加密并对其攻击

对单表代换加密算法的实现和攻击 ——P阮琪森 单表代换加密算法的实现 对单表代换加密算法的理解。 单表代换加密算法是传统对称加密算法的一种,它主要是通过输入的密钥建立一个明文字符和密文字符的映射表来实现加密。它的密钥空间为26!,因此它相对于Caesar密码在抗穷举攻击方面有了很大的改进。但是在抗频率统计攻击方面就显得很脆弱,只要密文的长度足够,就可以轻易地进行唯密文攻击。 单表代换加密算法的设计。 明文plaintext密文ciphertext加密代换解密代换建立代换表建立代换表密钥检查明文plaintext密钥 明文plaintext 密文ciphertext 加密代换 解密代换 建立代换表 建立代换表 密钥检查 明文plaintext 密钥key 密文ciphertext 密钥key 代表代换解密算法设计单表代换加密算法设计 代表代换解密算法设计 单表代换加密算法设计 如上图所示,加密者先输入密钥key,用算法检查key是否符合规范,比如说不能重复,而且密钥要有26个字符。然后根据密钥,把密钥中的字符和明文中存在的字符26个字母一一对应起来,即建立代换表。然后输入明文plaintext,利用代换表把明文中的字母代换成代换表中相应的字母,从而生成密文。 解密时,输入密钥建立代换表,然后像加密一样,把密文中的字母代换成代换表中相应的字母,从而再现明文。 程序设计及实现。 程序设计中对输入变量的要求: 密钥key:是26个英文字母的排列, 明文plaintext:要求明文中只能有26个字母出现,不能有其他符号包括空格,大小写不限,长度不限,可从键盘输入,也可从txt文件读入。 密文ciphertext:全部用大写字母,只能有26个字母出现,不能有其他符号包括空格,长度不限,可从键盘输入,也可从txt文件读入。 int main(int argc,char *argv[]) main()为主函数,为程序入口,负责让用户选择加密/解密功能; int Encryption(void) Encryption()为加密子函数,负责让用户输入密钥key和明文plaintext,并调用子函数check()对密钥进行检查。然后用密钥建立代换表replace,最后用代换表对明文进行加密并输出。输出有两种方式,一是直接显示在屏幕上,二是除了显示在屏幕上以外还输出到用户指定的文件中。 int Decryption(void) Decryption()和加密一样,根据输入的密钥和密文进行解密。 具体的程序源代码见代码文件:encryption.cpp 程序运行。 选择加密功能,输入密钥:qwertyuiopasdfghjklzxcvbnm,选择从文件输入明文,输入保存明文的文件名:plaintext.txt,输入保存密文的文件名:ciphertext.txt。运行结果如下图所示: 加密所得密文如下: 选择解密功能,输入密钥:qwertyuiopasdfghjklzxcvbnm,选择从文件读入密文,输入保存密文的文件名:ciphertext.txt,输入保存解密所得明文的文件名:decryption.txt。运行结果如下: 解密所得明文如下: 对单表代换密码进行攻击。 频率统计攻击方式的理解。 频率统计攻击就是统计密文中各个字符出现的相对概率,然后和自然语言中各个字符出现的概率进行对比,由此推断出各个字符的明密文对应关系。这一方法对于破译由单表代换加密得来的密文很有效。但它也有局限性,就是当密文较短的时候,很难准确地判断出明密文对应关系。 自然语言中各个字母出现概率的分析和“可能明文”可能性的理解。 图1. 自然语言中各个英文字母出现概率统计图 根据上图可知,由于{e,t,a,o}的频率无论是和其它的比较还是它们相互之间比较,差距都很大,因此在密文长度有限的情况下也能轻易地确定出相应明密文字符的对应关系。剩下的字母中又可以分为5组,分别是{i,n,s,h,r}、{d,l}、{c,u,m,w,f,g,y,p}、{b,v,k}、{j,x,q,z}这五组相互之间的差距相对它们的频率来说都很大,而内部各个字符之间差距相对它们的频率来说较小。因此统计出密文各个字符的概率后可以较为容易地区分出相应的字符对应的组别。以上这些,可以在设计程序的时候考虑进去以破译出可能性更大的明文。 可能明文在本次程序设计中理解成为程序破译出来的明文,它与实际明文中的字符的差距越小,表明它的可能性就越大,也就是说可能明文中某一位置的字符与实际明文中对应位置的字符相同,而这样的位置越多,这一个可能明文的可能性就越大。 按照以上的想法,在程序设计过程中就应该优先把频率大的字母正确地破译出来。 程序设计的主要算法的思想。 在本程序的设计中面临的主要问题时,怎么使得可能性

文档评论(0)

qee026 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档