现代密码学大作业(一):实现单表替换的频率分析(python3.7)

现代密码学大作业(一):实现单表替换的频率分析

 

(知识水平、技能能力有限,如有不足之处,还望多多批评指正)

单表代替是最基础的一种加密方式。在加密时用一张自制字母表上的字母来代替明文上的字母(比如说A——Z,B——D)来达到加密。移位密码也属于单表代替,只不过比较有规律,相当于集体向前或向后。这种加密方法最容易被破解。破解方法为统计法。在英语中,最常用的字母为E,所以在密文中代替E 的字母出现的频率也最高,由此便可破解。

与移位加密不一样,一般的单表替换密钥量比较大。

英语中有26个字母 

密钥总量: =26!=26×25×⋯×2×1≈ 4.03291461×101 年=365×24×60×60=3.1536×10秒

天河二号机以每秒2.57千万亿次的速度来计算,若一 次运算能检验可能密钥中的一条,则检查完所有 的密钥并破解信息花费的时间大概是500年

 

公元九世纪,阿拉伯密码破译 专家,击破单表替换密码。

据大量分析发现,在具有一定量的英文文章中,字母的出现频率是一定的。

 

e:出现频率约为0.127

t,a,o,i,n,s,h,r:出现频率约在0.06到0.09之间

d,l:的出现频率约为0.04

c,u,m,w,f,g,y,p,b :出现频率约在0.015到0.028之间

所以,通过分析字母频率来解决单表替换成为了可能

 

《福尔摩斯 跳舞的小人》那一章中跳舞的小人就可以认为是一种单表替换密码

 

先给出用python3.7写出的频率分析程序



# -*- coding: utf-8 -*-

 

s=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
b=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
f1=open("D:单表破译.txt","r+")

message=f1.read()#读取文章

sum=0#总数

for i in message:
    if('A'<=i<='Z'):#只记录字母
        sum=sum+1#记录字母总数
        for j in range(0,26):
            if(s[j]==i):
                b[j]=b[j]+1
print(sum)#字母总数
print(b)#各个字母总数



for i in range(0,26):
    result.append((b[i]/sum))
    print(s[i],":",(b[i]/sum)*100)
#打印频率

找到频率后,可先修改部分字母的对应关系,再根据上下文求出各个字母的对应关系。

下图是样例输出的情况

 

 

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值