Python 凯撒密码解密

  • 简介
  • 加密
  • 解密
  • python程序。
  • 其他参考文章

简介

在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

加密

首先我们确定一个偏移量也就是秘钥,然后将原文中的每个英文字母偏移替换,例如:
key = 3
原文: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‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

解密

如果我们知道秘钥,解密方法就是加密的反过程。但在实际情况下我们往往不知道秘钥。因此需要我们通过一些算法去获得秘钥。
常用的解密方法:

  1. 穷举遍历各个key,因为秘钥只能是0-25,因此我们可以通过循环遍历的方法来得到各个key下的解密后的信息,然后对其进行判断,得到可能的秘钥。
  2. 词频统计法。因为凯撒密码中的每个字符的映射是固定的,因此如果a映射到d,那么每次a在明文中出现的时候d就会在密文中出现。已知英文中每个字母的概率分布,不同字母在不同文本中的平均出现概率通常一样的,且文本越长,频率计算越接近平均值。

用0到25的数字表示英文字母。令pi(0<= i < 26)表示普通英文文本中字母i出现的概率,对已知的值pi容易计算
∑i=025p2i≈0.065379
∑i=025pi2≈0.065379
现在给定一些密文,并令qi表示第i个字母在密文中的频率(qi是第i个字符出现的次数除以密文的长度)。如果密钥是k,那么期望对于每个i,qi+k约等于pi(这里用i+k代替(i+k)mod26)
对于每个j从0到25
Ij=∑i=025piqi+j≈0.065379
Ij=∑i=025piqi+j≈0.065379
如果发现Ik约等于0.065379,这里k就是密钥。这样,密钥恢复攻击非常容易自动进行:对于所有j计算Ij,并输出所有Ik接近0.065379的k。

python程序。

def Count(path,CountDict):#获取密文中每个字母出现的概率file = open(path,'r',encoding='utf-8')lst = list(file.read())file.closefor i in lst:if i in CountDict:CountDict[i] += 1for i in CountDict.keys():CountDict[i] /= len(lst)
def Analysis(p,CountDict):#解密函数eps = 1 #与结果的差值key = 0q = list(CountDict.values())for j in range(26):#遍历各种秘钥s = 0for i in range(26):#求sum(pi*qi)t = (i+j)%26s += p[i]*q[t]tem = abs(s - 0.065379)if(tem < eps):eps = temkey = jreturn key #已知英文字母在单词中出现的频率表
p = [0.082,0.015,0.028,0.042,0.127,0.022,0.02,0.061,0.07,0.001,0.008,0.04,0.024,0.067,0.075,0.019,0.001,0.06,0.063,0.09,0.028,0.01,0.024,0.02,0.001,0.001]
#p是已知的频率分布表
q = [0 for i in range(26)]
letter = list("abcdefghijklmnopqrstuvwxyz")
CountDict = dict(zip(letter,q))
Count("密文.txt",CountDict)
key = Analysis(p,CountDict)
print("秘钥是:"+str(key))

其他参考文章

  1. C语言版的凯撒密码解密程序 https://blog.csdn.net/wyf12138/article/details/73733339
  2. 凯撒密码介绍 https://blog.csdn.net/chengqiuming/article/details/82077723

Python凯撒密码解密相关推荐

  1. python凯撒密码实现_密码:凯撒密码及其Python实现

    python凯撒密码实现 Before we start let's some basic terminology... 在开始之前,让我们先介绍一些基本术语... The art and scien ...

  2. Python凯撒密码

    Python凯撒密码 设置变量储存字母字符串 text = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 循环设置 while True ...

  3. python凯撒密码加密写入文件_Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作...

    #-*- coding: gb2312 -*-#用户名密码登录系统(MD5加密并存入文件)及对字符串进行凯撒密码加解密操作#作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/k ...

  4. python123 凯撒密码,Python:Caesar代码,python,凯撒,密码

    题目来自:python123.io 题目描述 恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的 ...

  5. python凯撒密码详解_Python基础题目集--课堂案例

    这些案例均为在校期间学习<python基础编程>课程的案例,适合初学者练手~ 1.输入分数,返回等级 ''' 分数区间为0~100,等级:A(>=90).B(>=80).C(& ...

  6. 凯撒密码解密加密(C语言)

    一.凯撒密码 在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后( ...

  7. python凯撒密码e_凯撒密码python实现

    写在前面的话 凯撒密码原理比较简单. 原理 在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文 ...

  8. python 凯撒密码加密和暴力破解

    def decrypt(message):#凯撒密码破解SYMBOLS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'#循环遍历所有可能的KEYfor key in range(len(SY ...

  9. Python|凯撒密码

    凯撒密码是古罗马凯撒大帝用来对军事情报进行加密的算法,它采用了替换方法对信息的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符. 原文:A B C D E F G H I J K L M N ...

最新文章

  1. python使用opencv_Python使用OpenCV进行标定
  2. iOS - 利用 UIBezierPath 绘制圆弧
  3. android windows 上JNI编程
  4. php mysql复杂查询_PHP MySQL如何做更复杂的查询
  5. 安装windows7系统报错
  6. 部分关键字--this/extends/super/static/final/abstract/访问权限总结
  7. CodeBook算法
  8. 第九章 SG90伺服舵机模块的使用
  9. ISO/IEC 14443、射频、PICC
  10. 设置redis key的expire过期时间
  11. 实验吧-密码学(二)
  12. Android消息机制(Handler机制) - 线程的等待和唤醒
  13. 如何扩充C盘空间,不需要删除其余盘的任何东西。
  14. 【双写迁移方案】实现动态切换实现分库分表
  15. iOS YYModel使用方法
  16. ps怎么做出发光抽象效果| 萧蕊冰
  17. WordPress初学者入门教程-分类和标签
  18. php 微信 语音,PHP语言微信开发:微信录音临时转永久存储
  19. Commons Email-电子邮件发送
  20. java enum从几开始,Enum应该从0还是1开始?

热门文章

  1. 贵卅大学计算机研究生院导师,贵州大学机械工程学院研究生导师:罗绍华
  2. 全量表/增量表/快照表
  3. 风影ASP.NET基础教学 10 DetilsView
  4. wps vba连接mysql_第12篇 WPS数据库编程.pdf
  5. 传说之下计算机音乐大全,传说之下同人音乐
  6. 2023最新绿色高端生活家具装饰公司网站模板源码+织梦Dedecms内核的
  7. Linux设备驱动子系统第二弹 - SD卡
  8. 如何检测文章被搜索引擎收录(如何让搜索引擎收录网站)
  9. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取)...
  10. git与github使用