1.凯撒密码(Caesar)

凯撒密码简单理解就是将字符进行平移。

例如:将字母右移10位,那么 Password 将加密成Zkccgybn

凯撒加密的密钥就是右移的位数,由于只有26个英文字母,所以总共有26个密钥,暴力破解,穷举搜索,就可以破解密文。

python实现如下:

#! /usr/bin/env python3#Caesar Encryptdef CaeserEncrypt(text,n=10):#默认右移10位if not text.isalpha():raise Exception('Input must be a text of letters\n')else:res = ''for char in text:num = ord(char)if char.isupper():if num+n >90:res += chr(num+n-26)else:res += chr(num+n)else:if num+n > 122:res += chr(num+n-26)else:res += chr(num+n)return resif __name__ == '__main__'://Caeser Encrypttext = 'Password'print(CaeserEncrypt(text))//穷举破解text = 'Zkccgybn'for i in range(1,27):print(CaeserEncrypt(text,i),' ',end='')结果如下:
ZkccgybnAlddhzco  Bmeeiadp  Cnffjbeq  Doggkcfr  Ephhldgs
Fqiimeht  Grjjnfiu  Hskkogjv  Itllphkw  Jummqilx
Kvnnrjmy  Lwoosknz  Mxpptloa  Nyqqumpb  Ozrrvnqc
Password  Qbttxpse  Rcuuyqtf  Sdvvzrug  Tewwasvh
Ufxxbtwi  Vgyycuxj  Whzzdvyk  Xiaaewzl  Yjbbfxam
Zkccgybn  

2.简单替换密码

凯撒密码将字母平移,本质是建立了一个字母之间的一一映射,它也是一种特殊的替换密码。

如果我们打乱这种替换顺序,新建一个字母之间的一一映射,就可以得到一种新的加密方式,这就是简单替换密码。

python实现如下:

#! /usr/bin/env python3#替换加密import randomdef generate_key():#随机生成一个密钥key = {}list = []for i in range(26):while True:char = chr(round(random.uniform(65,90)))if char not in list:breakkey[chr(65+i)] = charlist.append(char)for k,v in key.copy().items():key[k.lower()] = v.lower()return keydef replaceEncrypt(text,key):#给定 明文和替换密钥 进行加密res = ''for char in text:if char.isalpha():res += key[char]else:res += charreturn resif __name__ == '__main__':key = generate_key()print(key)text = 'Password'print(replaceEncrypt(text,key))结果如下:
由于每次生成的替换密钥都不一样,所以同一文本,每次得到的密文也不一样{'M': 'X', 'j': 'k', 'L': 'A', 'R': 'Y', 'B': 'N',
'V': 'E', 'U': 'P', 'm': 'x', 'Q': 'J', 'O': 'O',
'P': 'F', 'W': 'B', 'c': 'i', 'o': 'o', 'l': 'a',
'Y': 'S', 't': 'm', 'y': 's', 'k': 'h', 'C': 'I',
'd': 'v', 'a': 'g', 'r': 'y', 'T': 'M', 'e': 'r',
'f': 'w', 'X': 'U', 'g': 't', 'S': 'C', 'n': 'l',
'G': 'T', 'q': 'j', 'z': 'd', 'E': 'R', 'D': 'V',
'i': 'z', 'p': 'f', 'K': 'H', 'F': 'W', 'h': 'q',
'N': 'L', 'x': 'u', 'H': 'Q', 'b': 'n', 'w': 'b',
'J': 'K', 's': 'c', 'A': 'G', 'Z': 'D', 'u': 'p',
'I': 'Z', 'v': 'e'}Fgccboyv

3.密钥空间 keyspace

密钥空间即为所有密钥的集合。

对于凯撒加密,由于只有26中可能的密钥,故密钥空间大小为26.

而对于替换加密,密钥空间大小为26!,数量级为10^26。对于如此大的密钥空间,尝试穷举就显得乏力了。

4.频率分析

虽然替换密码密钥空间巨大,但是如果用频率分析的方法,就比较容易破解了。

如果我们一段替换加密的密文,并且文本长度越长越好,我们可以通过,统计字母出现的频率,逐渐尝试出加密密钥来。

python实现如下:

#! /usr/bin/env python3import pprintdef letterCount(text,flag=True):'''统计文本中各个字母出现的次数输入文本和是否忽略大小写,默认忽略大小写'''res = {}for char in text:if flag:char = char.lower()res.setdefault(char, 0)res[char] += 1return resif __name__ == '__main__':text = '''Monte Ne is a former health resort and planned community in the U.S. state of Arkansas,
open from 1901 to the mid-1930s. It was owned and operated by William Hope Harvey,
a financial theorist and writer,
in the Ozark hills of the White River valley east of Rogers on the edge of Beaver Lake.
Two of its hotels, Missouri Row and Oklahoma Row,
were the largest log buildings in the world at the time,
and Oklahoma Row's tower is one of the earliest examples of a multi-story concrete structure.
The resort was not a financial success,
due in part to Harvey's management style,
and shortly after his death the property was sold off.
The remainder of the resort and town was almost completely submerged after Beaver Lake was created in 1964.
The severely vandalized Oklahoma Row tower is the only remaining structure that can be seen at normal lake levels.
The area on the edge of Beaver Lake still referred to as Monte Ne,
owned and managed by the United States Army Corps of Engineers,serves mainly as a boat ramp.'''import replaceEncryptkey = replaceEncrypt.generate_key()print('替换密钥是:')pprint.pprint(key)decrypted_text = replaceEncrypt.replaceEncrypt(text, key)print('\n密文是:\n%s'%decrypted_text)res1 = letterCount(text, flag=True)  # 忽略大小写进行统计print('\n明文的字母统计:')pprint.pprint(res1)print('\n 密文的字母统计:')res2 = letterCount(decrypted_text, flag=True)  # 忽略大小写进行统计pprint.pprint(res2)替换密钥是:
{'A': 'F','B': 'D','C': 'X','D': 'J','E': 'U','F': 'O','G': 'K','H': 'C','I': 'R','J': 'Z','K': 'H','L': 'E','M': 'Y','N': 'N','O': 'V','P': 'A','Q': 'M','R': 'T','S': 'Q','T': 'B','U': 'I','V': 'L','W': 'W','X': 'G','Y': 'S','Z': 'P','a': 'f','b': 'd','c': 'x','d': 'j','e': 'u','f': 'o','g': 'k','h': 'c','i': 'r','j': 'z','k': 'h','l': 'e','m': 'y','n': 'n','o': 'v','p': 'a','q': 'm','r': 't','s': 'q','t': 'b','u': 'i','v': 'l','w': 'w','x': 'g','y': 's','z': 'p'}密文是:
Yvnbu Nu rq f ovtyut cufebc tuqvtb fnj aefnnuj xvyyinrbs rn bcu I.Q. qbfbu vo Fthfnqfq,
vaun otvy 1901 bv bcu yrj-1930q. Rb wfq vwnuj fnj vautfbuj ds Wreerfy Cvau Cftlus,
f ornfnxrfe bcuvtrqb fnj wtrbut,
rn bcu Vpfth creeq vo bcu Wcrbu Trlut lfeeus ufqb vo Tvkutq vn bcu ujku vo Duflut Efhu.
Bwv vo rbq cvbueq, Yrqqvitr Tvw fnj Vhefcvyf Tvw,
wutu bcu eftkuqb evk direjrnkq rn bcu wvtej fb bcu bryu,
fnj Vhefcvyf Tvw'q bvwut rq vnu vo bcu ufteruqb ugfyaeuq vo f yiebr-qbvts xvnxtubu qbtixbitu.
Bcu tuqvtb wfq nvb f ornfnxrfe qixxuqq,
jiu rn aftb bv Cftlus'q yfnfkuyunb qbseu,
fnj qcvtbes fobut crq jufbc bcu atvautbs wfq qvej voo.
Bcu tuyfrnjut vo bcu tuqvtb fnj bvwn wfq feyvqb xvyaeubues qidyutkuj fobut Duflut Efhu wfq xtufbuj rn 1964.
Bcu qulutues lfnjferpuj Vhefcvyf Tvw bvwut rq bcu vnes tuyfrnrnk qbtixbitu bcfb xfn du quun fb nvtyfe efhu eulueq.
Bcu ftuf vn bcu ujku vo Duflut Efhu qbree tuouttuj bv fq Yvnbu Nu,
vwnuj fnj yfnfkuj ds bcu Inrbuj Qbfbuq Ftys Xvtaq vo Unkrnuutq,qutluq yfrnes fq f dvfb tfya.明文的字母统计:
{'\n': 14,' ': 180,"'": 2,',': 10,'-': 2,'.': 9,'0': 2,'1': 4,'3': 1,'4': 1,'6': 1,'9': 3,'a': 79,'b': 9,'c': 13,'d': 28,'e': 113,'f': 19,'g': 11,'h': 34,'i': 39,'k': 9,'l': 40,'m': 27,'n': 50,'o': 63,'p': 11,'r': 63,'s': 54,'t': 74,'u': 13,'v': 11,'w': 20,'x': 1,'y': 15,'z': 2}密文的字母统计:
{'\n': 14,' ': 180,"'": 2,',': 10,'-': 2,'.': 9,'0': 2,'1': 4,'3': 1,'4': 1,'6': 1,'9': 3,'a': 11,'b': 74,'c': 34,'d': 9,'e': 40,'f': 79,'g': 1,'h': 9,'i': 13,'j': 28,'k': 11,'l': 11,'n': 50,'o': 19,'p': 2,'q': 54,'r': 39,'s': 15,'t': 63,'u': 113,'v': 63,'w': 20,'x': 13,'y': 27}

如果我们可以接触到这个加密过程,通过测试给定的明文,得到密文之后,进行频率对比就很容易得到加密密钥了。

如果我们无法接触到这个加密过程,我们也可以把给定密文的字母出现频率和经验中的字母出现频率做一定对比,我们也可以通过尝试逐步破解。

从零开始入门密码学_1相关推荐

  1. kubelet配置cni插件_从零开始入门 K8s | 理解 CNI 和 CNI 插件

    原标题:从零开始入门 K8s | 理解 CNI 和 CNI 插件 作者 | 溪恒 阿里巴巴高级技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 26 讲,点击直达课 ...

  2. 从零开始入门 K8s | Kubernetes 存储架构及插件使用

    作者 | 阚俊宝 阿里巴巴高级技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 21 讲. 关注"阿里巴巴云原生"公众号,回复关键词**&quo ...

  3. k8s使用volume将ConfigMap作为文件或目录直接挂载_从零开始入门 K8s | 如何实现应用配置管理?...

    作者 | 何淋波(新胜) 阿里云容器服务技术专家 需求来源 背景问题 首先一起来看一下需求来源.大家应该都有过这样的经验,就是用一个容器镜像来启动一个 container.要启动这个容器,其实有很多需 ...

  4. 画活动图教程_如何画一只漫画风的手,看着自己的俩只手,带你从零开始入门手绘——008...

    给零基础新手的入门系列教程: 何天衢:[干货1]零基础小白学画画,到底应该从哪下手?​zhuanlan.zhihu.com 不知道谁说:画兽难画狗,画人难画手,脸比手更难,一捂遮百丑. 虽然不知道为什 ...

  5. 从零开始入门创作游戏——游戏对象的脚本编辑

    做教程远比自己开发游戏要花时间...继续写小恐龙的游戏教程 环境搭建在这里 从零开始入门创作游戏--Unity3d的环境搭建_默哀d的博客-CSDN博客 素材导入和基本页面介绍在这里 从零开始入门创作 ...

  6. rmd中无法打开链结r_从零开始入门R语言—Rstudio下载与安装

    注意:在安装Rstudio之前一定要现状R软件. 安装方法: QQ ZHOU:从零开始入门R语言-软件下载及安装​zhuanlan.zhihu.com 一.下载安装RStudio 上节我们已经下载了R ...

  7. 从零开始入门创作游戏——对象交互与UI展示

    做教程远比自己开发游戏要花时间...继续写小恐龙的游戏教程 环境搭建在这里 从零开始入门创作游戏--Unity3d的环境搭建_默哀d的博客-CSDN博客 素材导入和基本页面介绍在这里 从零开始入门创作 ...

  8. 从零开始入门 ZigBee 3.0(以TI为例)

    [源码.文档.软件.硬件.技术交流.技术支持,入口见文末] 前言 本篇主要讲述如何从零开始从零开始入门 ZigBee 3.0,此处以 TI 的 ZigBee 方案为例. ZIgBee的学习本应分为&q ...

  9. 从零开始入门pwn(一):pwn的介绍以及部分前置知识

    目录 一.前言 二.pwn的介绍 pwn的定义 pwn的题目模式 前置知识 一.Linux 二.C语言 三.汇编语言 四.计算机组成原理 三.总结 一.前言 本人凭着一腔热血想要入门pwn,但却被pw ...

最新文章

  1. 在CheckBox中,仅仅允许选择一项
  2. 一、查看MVC4还是MVC5
  3. Java中的nextInt()和next()与nextLine()区别详解
  4. Xamarin.Android 开发中遇到旋转屏幕错误
  5. python 字典练习 记录学生是否交作业的小程序
  6. python函数表格_python 6.7 编写printTable()函数表格打印(完整代码)
  7. 任正非:美国迟早会爱上华为
  8. 135.001 智能合约设计-——单员工薪酬系统
  9. Debian9.5安装VNC并且配置vnc开机自启动
  10. ad15的stc元件库_常用的Altium Designer AD09 AD14 AD18元件库 原理图库(543个)+PCB封装库(509个)...
  11. java生成二维码工具
  12. P2346 四子连棋 题解
  13. 安捷伦仪器仪表 - 程控总结
  14. ubuntu10.10下安装五笔86输入法
  15. 基本粒子群算法小结及算法实例(附Matlab代码)
  16. linux3.6.7在ok6410平台的移植3,ok6410移植uboot2012.10一直在Starting kernel
  17. 计算机蓝屏用故障卡,电脑蓝屏后一直卡在正在启动界面怎么处理
  18. MacOS启动台(launchpad)缺少应用软件图标
  19. Civilization V and Beyond Earth
  20. 位运算bitwise_and函数

热门文章

  1. 虚拟机问题:无法将网络更改为桥接状态:没有未桥接的主机网络适配器
  2. 【C语言】三子棋(井字棋)的实现
  3. 柯乐义高级弹出菜单(可以有三级菜单)
  4. 扇贝编程python学习笔记-基础篇10
  5. ASPICE详细介绍-1.什么是ASPICE?
  6. 数据盘扩容(数据不丢失)
  7. RocketMQ作业
  8. The Adventure of TinTin -- The Shooting star
  9. 关于 身体 不适的 English
  10. python爬取京东商品(使用cookies,header,xpath匹配),解决ajax。 后附有selenium模拟访问抓取网页方法和视频演示