快捷搜索:  汽车  科技

零基础编程入门教程(零基础编程密码学基础理论篇)

零基础编程入门教程(零基础编程密码学基础理论篇)如果要解密,编码减去这个密钥key, 而不是加上它。破解方法:爆破方式,逐个密钥尝试key=3 为密钥-加密轮盘:明文密文同心圆中进行对照-St.Cry滑条,对照显示加密一个字母的步骤是 : 1 .从 1到 2 5选一个密钥 。保管好这个密钥 ! 2 .找出明文字母的数字 。 3 .把密钥加到这个明文字母的数字 。 4 .如果这个数字大于 2 6 ,则减去 2 6 。 5 .找出你计算的数字的字母 。这就是密文字母 。 6 .对明文消息里的每个字母重复步骤 2 ~ 5 。 思考?多次凯撒加密是否更安全?答案是否定的,多次加密反而无效,直接得到明文对字符进行编码

摘要

书接前文:《Python基础》

本文将简单从0开始分享密码学,从摩斯密码到凯撒加密法,以及常见常用的信息加密方法。学会如何对消息进行简单的加密和解密,以及破解。涉及部分编程知识需要先学习前文的Python基础。

部分知识参考: Al Sweigart 斯维加特. Python密码学编程 https://s.click.taobao.com/61N1Nhv内容

1-摩斯代码 morse 2-手工制作加密工具 3-凯撒加密法的信息加密、解密及过程 4-反转加密法 5-换位加密法、加密、解密及过程 6-数乘加密法 7-仿射加密法 8-简单替代加密法 9-维吉尼亚加密法——多表替代加密法 10-一次一密加密法 one time pad cipher 11-公钥密码学 12-RSA加密法 13-总结

零基础编程入门教程(零基础编程密码学基础理论篇)(1)

左边是密文,右边是明文

1-摩斯代码 morse

电报原理:将英文字母转成电子脉冲(编码),另外一头将电子脉冲转换成为英文字母(解码)

零基础编程入门教程(零基础编程密码学基础理论篇)(2)

2-手工制作加密工具

-加密轮盘:明文密文同心圆中进行对照

零基础编程入门教程(零基础编程密码学基础理论篇)(3)

-St.Cry滑条,对照显示

零基础编程入门教程(零基础编程密码学基础理论篇)(4)

3-凯撒加密法的信息加密、解密及过程

加密一个字母的步骤是 : 1 .从 1到 2 5选一个密钥 。保管好这个密钥 ! 2 .找出明文字母的数字 。 3 .把密钥加到这个明文字母的数字 。 4 .如果这个数字大于 2 6 ,则减去 2 6 。 5 .找出你计算的数字的字母 。这就是密文字母 。 6 .对明文消息里的每个字母重复步骤 2 ~ 5 。 思考?多次凯撒加密是否更安全?答案是否定的,多次加密反而无效,直接得到明文

零基础编程入门教程(零基础编程密码学基础理论篇)(5)

对字符进行编码

零基础编程入门教程(零基础编程密码学基础理论篇)(6)

key=3 为密钥

如果要解密,编码减去这个密钥key, 而不是加上它。

破解方法:爆破方式,逐个密钥尝试

4-反转加密法

对明文进行倒序反转,例如:“Hello world!” 反转加密变为:成“! dlrow olleH”

加密性弱,一般用于密文进行反转加密

5-换位加密法、加密、解密及过程

对明文信息进行打乱顺序,例如:加密“ Common sense is not so common.” 这条 消息。 算上空格和 标点符号, 这条消息包含30个字符。利用密钥Key=8 即8列

加密过程:

零基础编程入门教程(零基础编程密码学基础理论篇)(7)

将明文是行的,密文为列,即:密 文 是“ Cenoonommstmme oo snnio. s s c”

加密 的 步骤 如下: 1. 数 一下 消息 里 的 字符 个数。 2. 画 一行 个数 等于 密钥 的 格子。( 比如说, 密钥 是 12, 格子 就有 12 个。) 3. 从左到右 开始 填充 格子, 每个 格子 填 一个 字符。 4. 当你 用完 格子 还有 字符 剩下 时, 再加 一行 格子。 5. 把 最后 一行 剩下 不用 的 格子 涂成 灰色。 6. 从 最上 角 开始 往下 写出 字符。 当你 到达 这一 行的 底部 后, 移到 右边 那 一列。 跳过 任何 灰色 的 格子。 这 就是 密 文。 Al Sweigart 斯维加特. Python密码学编程(异步图书) (p. 74). 人民邮电出版社. Kindle 版本.

解密过程:

收到密 文“ Cenoonommstmme oo snnio. s s c” ,知道密钥是 8,密文长度Length / 密钥key = 30/4 =3.75,向上取整为4,将密文按列放在4列8行的表格中,如下:

零基础编程入门教程(零基础编程密码学基础理论篇)(8)

得到明文“ Common sense is not so common.”

解密的步骤 如下: 1. 将 消息 的 长度 除以 密钥 并向 上 取整 计算 需要 的 列数。 2. 画出 一定 数量 的 格子。 列数 已在 第一步 计算, 行数 和 密钥 一样。 3. 将 格子 的 个数( 行数 乘以 列数) 减去 密 文 消息 的 长度 计算 需要 涂 灰 格子 的 个数。 4. 涂 灰 最 右边 那一 列 下面 的 格子, 个数 已在 第三步 计算。 5. 填入 密 文 的 字符, 从 最上 面 那一 行 开始, 从左 向右 填入。 跳过 任何 灰色 格子。 6. 要 获取 明文, 从 最 左边 那一 列 开始, 从上往下 读取, 然后 移到 下一 列 顶部。 Al Sweigart 斯维加特. Python密码学编程(异步图书) (p. 95). 人民邮电出版社. Kindle 版本.

破解方法:通常我们在不知道密钥key的情况下,采用爆破密钥key 然后通过英文单词检测的方式来破解密文。

6-数乘加密法

凯撒加密法,都是采用将密钥加到字符串的索引去,而数乘加密法是采用乘法将密钥乘索引。

在凯撒加密法里 ,加密和解密符号涉及把它们转换成数字 ,加上或减去密钥 ,然后把新的数字转换回符号 。

如果我们在加密时不是加上密钥而是乘以呢 ?这会导致 “回调 ”问题 ,不过取模运算符可以解决这个问题 。比如说 ,我们使用只包含大写字母的符号集和密钥 7 。

下面列出字母及其数字 :

零基础编程入门教程(零基础编程密码学基础理论篇)(9)

要找出符号 F使用密钥 7会加密成什么 ,将它的数字 ( 5 )乘以 7 ,再对 2 6取模 (处理 2 6符号集的 “回调 ” ) 。然后使用那个数字的符号 。 ( 5 × 7 )取模 2 6 = 9 , 9是符号 J的数字 。因此 , F在乘数加密法里使用密钥 7会加密成 J 。同理得到:

零基础编程入门教程(零基础编程密码学基础理论篇)(10)

问题1:

乘数加密法有个缺点,就是A没有被加密,密文也是A,因为A的索引是0,0乘上任何Key都是0,所以,我们在乘数keyA后,再进行凯撒加密法进行加法keyB加密。于是得到仿射加密法。

问题2:不是任意的数都可以作为乘数加密的密钥Key,例如8,会导致密文多对一。密钥他和字符集大小,要互质。

零基础编程入门教程(零基础编程密码学基础理论篇)(11)

两个数的最大公约数为1,则两个数互质

求两个数的最大公约数算法:欧几里得算法

def gcd (a b ) : while a ! = 0 : a b = b % a a return b

零基础编程入门教程(零基础编程密码学基础理论篇)(12)

算法过程

7-仿射加密法
  • 乘数加密法 凯撒加密法 =仿射加密法
  • 零基础编程入门教程(零基础编程密码学基础理论篇)(13)

    加密过程:

    零基础编程入门教程(零基础编程密码学基础理论篇)(14)

    x为明文的索引,a b为密钥key

    解密过程:

    零基础编程入门教程(零基础编程密码学基础理论篇)(15)

    x为明文的索引,a b为密钥key

    8-简单替代加密法

    不重复地简单替代,例如26个字母替代组合有:26! 种(403291461126605635584000000)

    零基础编程入门教程(零基础编程密码学基础理论篇)(16)

    26!数量也很庞大,要逐个暴力破解,也不用简单。

    常用破解方式是采用:单词模式 词典

    例如密文是:HGHHU,长度为5,第1、3、4字母一样,三种字母H、G、U,单词模式为01002

    找本牛津词典,找出这种模式的单词进行备选即可,例如:

    零基础编程入门教程(零基础编程密码学基础理论篇)(17)

    解密出来的明文备选:

    零基础编程入门教程(零基础编程密码学基础理论篇)(18)

    密文对照

    当对3组左右的单词,对得到的备选对照进行取交集,基本上就可以得到明文替换的对照关系。

    9-维吉尼亚加密法——多表替代加密法

    和凯撒加密法类似,密钥采用多个(多组替代),凯撒加密的密钥范围是0-25,多表替代加密是采用一个字母密钥,例如:PIZZA 第1个密钥是P,第2个子密钥是I,第3、4密钥是Z,以此类推,如下:

    零基础编程入门教程(零基础编程密码学基础理论篇)(19)

    零基础编程入门教程(零基础编程密码学基础理论篇)(20)

    密码表

    举个栗子: 明文:ATTACKATDAWN 关键字:LEMON,密钥为:LEMONLEMONLE 加密过程:第一个字母A,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母L 类似地,明文第二个字母为T,在表格中使用对应的E行进行加密,得到密文第二个字母X 加密后得到密文:LXFOPVEFRNHR

    加密过程:

    零基础编程入门教程(零基础编程密码学基础理论篇)(21)

    解密过程:

    零基础编程入门教程(零基础编程密码学基础理论篇)(22)

    加密复杂度:密钥长度决定,每加一个长度复杂的就×26,当密钥长度超过12位基本上普通电脑破解就很难。

    破解方法:词频分析与ETAOIN

    英语中,每一个英文单词的使用频率都不一样,就像我们汉语常用也就3千个字,里面每一个字的频率都不一样。

    零基础编程入门教程(零基础编程密码学基础理论篇)(23)

    我们对密文的单词进行频率统计,对用常用字母频率ETAOIN匹配即可得到密文中最高频率与低频率的对照关系。

    零基础编程入门教程(零基础编程密码学基础理论篇)(24)

    剩下的继续按照,单词模式 字典的方式进行得到密文映射集合,然后多个集合取交集即可。

    10-一次一密加密法 one time pad cipher

    在多表替代加密法的基础上,加入以下规则:

    • 密钥和加密的消息同样长,密钥称之为密码本(pad)
    • 密钥由真正的随机符号组成
    • 密钥只用一次,永不对其他消息复用

    简称OTP,复杂程度为:字符集A^消息长度L次方,例如26^55次方,爆破基本不可能

    零基础编程入门教程(零基础编程密码学基础理论篇)(25)

    11-公钥密码学

    以上10种都是传统的加密方法,并且都是要求加密密钥和解密密钥相同,称之为对称加密法,基本都是给熟人(有你密钥)发送加密后的密文。

    对称加密:

    • 密钥加密
    • 密钥解密

    零基础编程入门教程(零基础编程密码学基础理论篇)(26)

    如果我们需要对不认识的人发送密文呢?例如你们要邮件、消息、文件发送要加密,发给一个未知的客户。这种场景问题,需要采用公钥密码学(public key cryptography),使用两个密钥,一个用来加密(共钥),一个用来解密(私钥) 称之为非对称加密法。例如你用工行的公钥加密消息,发给工行,工行用自己的私钥解密。其他人就算截取了你的消息,没有解密的私钥也没有用。

    非对称加密:

    • 公钥加密
    • 私钥解密

    典型非对称加密算法有:RSA加密法

    零基础编程入门教程(零基础编程密码学基础理论篇)(27)

    12-RSA加密法

    缺点1:无法做身份认证,例如你获得了工行的公钥,但是你无法确定这个“工行”就是工行,它可能是伪装的。就必须使用PKI(公钥基础设施)做身份认证,可以做安全地匹配到公钥。这要涉及认证的技术。

    零基础编程入门教程(零基础编程密码学基础理论篇)(28)

    缺点2:中间人攻击,如果工行把它的公钥发给你的时候,在中间被黑客截取了,并且把自己的公钥替换了工行的公钥发给你。你们在通信过程就被他们截取解密了。还是身份认证问题。

    RSA 密钥原理:

    1. 创建 两个 随机 的 非常 大的 质数。 这些 数字 分别 称做 p 和 q。 将 这些 数字 相乘 得到 一个 数字, 我们 把 它 称做 n。

    2. 创建 一个 随机数, 称做 e, 使 它与( p – 1) ×( q – 1) 互 质。

    3. 计算 e 的 模 逆。 这个 数字 称做 d。

    公 钥 将是 n 和 e 两个 数字。

    私 钥 将是 n 和 d 两个 数字。( 注意, 两个 密钥 都 包含 了 数字 n。)

    零基础编程入门教程(零基础编程密码学基础理论篇)(29)

    零基础编程入门教程(零基础编程密码学基础理论篇)(30)

    示例:

    零基础编程入门教程(零基础编程密码学基础理论篇)(31)

    13-总结

    了解传统加密方法及起加密解密过程,了解对称加密、非对称加密加密解密过程。本篇只是对理论部分进行初步学习认识,接下来对常用的加密算法进行Python编程实现及其使用实战

    猜您喜欢: