单表替换密码统计分析

上一篇文章提到一个任意单表替换密码算法如果k=n,那么密钥空间为k!

假设是英文字母表,密钥空间为26!,用穷举法破解不可行。

那么有其他办法吗?答案是肯定的。

我们知道语言具有一定特征的

1.偏用现象:在各种语言中,各个字母的使用次数是不一样的,有的偏高,有的偏低

2.频数:一个字母在一篇文章中出现的次数

3.使用频率:一个字母的频数除以文章的字母总数

               英文字母的使用频率分布

统计分析上表得到:

某些特定的文章会含有这样的特征:

开头结尾特征,开头和结尾受到固定格式的限制。

(在电影模仿游戏中,图灵破解Enigma的困难在于,当时每24小时更换一次秘钥,因此图灵必须在24小时内破解出来,否则情报就会越堆越多,甚至失效,即便事后破解出来也毫无意义。以当事的计算能力是不可能在24小时内破解出密钥的,但是德国人的秘密情报格式在开头和结尾都写“希特勒万岁”,如此才让计算的时间大大缩短,进而被“破解”了。)

频度最高的前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

频度最高的前20个三字母: THE ING AND HER ERE ENT THA NTH WAS ETH FOR DTH HAT SHE ION INT HIS STH ERS VER

the 的使用频率最高,是ing的三倍

一半的单词以es,dt结尾

一半的单词以ta,sw开头

y的使用频率90%都集中在单词的结尾

现在有一份密文:

假定我们已经知道明文是英文,加密方式是单表加密。

第一步:确定字母的出现次数

P和Z出现的次数最多,E在两者之间的可能性最大

OSU 在 II{r,n,i,o,a,s}

ABIJQTY 在IV V{w,v,b,k,x,q,j,z}

考察密文双字母组合ZW出现次数最多,很可能是TH

因此,猜测Z为T,W为H,P为E

考察三字母组合,ZWP->THE,ZWSZ->TH?T,S->A

再进一步分析基本上就是猜词了,最后得到的明文:

时间: 2024-10-14 06:47:57

单表替换密码统计分析的相关文章

单表代替密码

凯撒密码 Caser密码是古典加密的一种,由Julius Caser发明,当时发明的那种就是将26个英文字母按字母表循环移位,按顺序依次a -> d , b -> e , c -> f......根据移位不同统称为移位密码. 按照密码体制五元组 P = { a,b,c......z } C = { a,b,c......z } K = { 0,1,2......25 } 若是Caser密码,得到加密算法 E p = ( p + 3 ) mod 26 若移位可以是任意整数,得到加密算法 E

单表代替密码原理及算法实现

   要了解单表替代密码就得先了解替代密码,在这里我就做一下简单的介绍:      替代是古典密码中用到的最基本的处理技巧之一 .      替代密码是指先建立一个替换表,加密时将需要加密的明文依次通过查表,替换为相应的字符,明文字符被逐个替换后,生成无任何意义的字符串,即密文,替代密码的密钥就是其替换表.      根据密码算法加解密时使用替换表多少的不同,替代密码又可分为单表替代密码和多表替代密码.      单表替代密码的密码算法加解密时使用一个固定的替换表.单表替代密码又可分为一般单表替

古典密码-单表密码体制

如果明文中不同的位置的同一明文字母在密文中对应的密文字母相同,则称其为单表密码体制. 代表性的单表密码: 1.移位或加法密码 2.乘数或乘法密码 3.仿射密码 4.密钥短语密码 下面分别举一个例子: 1.加法密码算法: P=C=K=Zm   (Zm∈{0,1,...,m-1}) Ek(x)=x+k(mod m)=y∈C Dk(y)=y-k(mod m)=x∈P 当k=3时,该密码算法就是凯撒密码. E3(1)=1+3(mod 26)=4   1代表A,4代表D,所以就把明文A加密成D D3(4)

单表60亿记录等大数据场景的MySQL优化和运维之道

此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据存储平台建设和架构设计.前新浪高级数据库工程师,负责新浪微博核心数据库架构改造优化,以及数据库相关的服务器存储选型设计. 前言 MySQL数据库大家应该都很熟悉,而且随着前几年的阿里的去IOE,MySQL逐渐引起更多人的重视. MySQL历史 1979年,Monty Widenius写了最初的版本,

单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构(转)

转自http://www.php1.cn/Content/DanBiao_60_YiJiLuDengDaShuJuChangJingDe_MySQL_YouHuaHeYunWeiZhiDao_%7C_GaoKeYongJiaGou.html, 更多详细资料请参看原文 此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据存储平台建设和架构设计.前新浪高

[转载] 单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构

原文: http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=209406532&idx=1&sn=2e9b0cc02bdd4a02f7fd81fb2a7d78e3&scene=1&key=0acd51d81cb052bce4ec2a825666e97fe7d6e1072fb7d813361771645e9403309eb1af025691162c663b60ea990c3781&ascene=0&

【转】单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构

此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据存储平台建设和架构设计.前新浪高级数据库工程师,负责新浪微博核心数据库架构改造优化,以及数据库相关的服务器存储选型设计. 前言 MySQL数据库大家应该都很熟悉,而且随着前几年的阿里的去IOE,MySQL逐渐引起更多人的重视. MySQL历史 1979年,Monty Widenius写了最初的版本,

9.17 模型层 ORM 单表操作

1 创建模型 创建名为book的app,在book下的models.py中创建模型: from django.db import models # Create your models here. class Book(models.Model): id=models.AutoField(primary_key=True) title=models.CharField(max_length=32) state=models.BooleanField() pub_date=models.DateF

3.django模板,单表ORM增删改查

1.Django模板语法 模板语法: 变量: {{}} 1 深度查询 句点符 2 过滤器 {{val|filter_name:参数}} 标签: {% %} 1.1Django模板使用 from django.shortcuts import render import datetime def index(request): now = datetime.datetime.now() return render(request,"index.html",{"current_t