第一章:概述(古典密码算法)

  1. 置换算法
  2. 单表替换密码算法
  3. 多表代替密码算法

置换(Permutation)密码

  • 对明文字符或者字符组进行位置移动的密码
  • 明文的字母保持相同,但顺序被打乱了。
  • 例如:ATTACKATDAWN(attack at dawn) 黎明发起攻击
  • 可以把它的奇数位和偶数位分开组成一个单词:ATCADW TAKTAN ,这两个单词凑到一起,就成为了ATCADWTAKTAN,这样在即使敌手捕获到了明文,也无从分析出密文。

代替密码

  • 代替(Substitution)密码构造一个或者多个密文文字表,然后用密文字母表中的字母或者字母组来代替明文字母或者字母组,各字母或者字母组的相对位置不变,但是其本身的值改变了。
  • 代替密码分为单表代替密码和多表代替密码

字母与数字的转换

  • 代替密码算法针对英文字母进行处理。首先将26个英文字母与十进制数字中的0~25依次对应,如下表所示,而这里的数字的加法和乘法都定义为模26的加法和乘法。在这里插入图片描述

单表代替密码

单表代替密码可分为:

  • 加法密码
  • 乘法密码
  • 仿射密码

依次介绍:
加法密码

  • y=(x+k)mod26
  • 明文:x
  • 密文:y
  • 密钥:k(有26重选择)
  • 解密:x=(y-k)mod26

凯撒密码(Caesar)就是一种加法密码(k=3)
在这里插入图片描述

  • 设明文为:LOVE
  • 则密文为:ORYH

乘法密码

  • y=kx(mod26)
  • 明文:x
  • 密文:y
  • 密钥:k(有12种选择)
  • 解密:x=k-1y(mod26)
  • 条件:(k,26)=1(也就是说k与26的公共约数只有1,叫做k与26互素)

通过上面的介绍,乘法密码的关键在于计算k-1:

  • 方法:扩展的欧几里得算法
  • 若(m,n)=1,则存在整数k1,k2,使得k1m+k2n=1
  • 这里k1就是:m-1 mod n
  • 注意k1要为整数

那么在0~25之中,只有12个数字是和26互素的。

通过以上的分析,加法和乘法各有好处,能不能把二者结合起来使用呢?

仿射密码

  • 加密函数:y=(ax+b) mod 26
  • 密钥:a,b
  • 解密函数:x=a-1(y-b)(mod26)
  • 好处就是增大了密钥量,这个时候a有12种选择,b有26种选择,密钥量扩展到了312个。

单表替代的统计分析:

  • 单表替代的特点就是相同的明文被加密成相同的密文,这使得统计分析成为了可能。
  • 原因就是,我们所使用的英文字母,它出现的频率是有规律的,只要能够收集到足够多的密文,通过统计就能够很容易的进行密码的破译了。
  • 比如:常见的字母e出现的频率为0.127,收集到足够多的信息之后,我们统计字母中出现频率接近0.127的字母,很大概率就是e了。在这里插入图片描述怎么解决呢?

多表代替密码算法

Vigenera(维吉尼亚)密码
如图:在这里插入图片描述

大概思想:

  • 就是把26个英文字母,依次按照加法密码的方式,第一行加0,依次往下一直加到25,列成一个表。当然这个顺序是可以打乱的,只要加密与解密者清楚,而敌手不知道即可。

  • 然后选择一个词组作为密钥,比如hold。

  • 那么我们对一组明文进行加密时,可以把hold作为参照去寻找密文。

  • 比如:我要加密:this is the plain text(写成明文就是thisistheplaintext),以hold作为密钥,如下图:在这里插入图片描述

  • 那么去加密密文,就可以按照这个表,寻找所对应的字母,比如t 它在第 h 行对应的是A,h在第 o 行对应的是V,以此类推,如图:在这里插入图片描述

  • 那么对应的密文就可以唯一确定了,如图:在这里插入图片描述

  • h在第一次加密的时候,加密成了V,在第二次加密的时候,加密成了k。这就避免了敌手通过统计学分析来破译密文。

  • 由于密钥是一个单词,所以它可以有很多很多种可能性。

用数学语言描述多表代换密码

  • 多表代换密码首先将明文M分为由n个字母构成的分组M1,M2,……Mj,对每个分组Mi的加密为:
  • Ci=(A*Mi+B) mod N,i=1,2…,j
  • 其中(A,B)是密钥,A是n*n的可逆矩阵,满足gcd (|A|,N)=1(|A|是行列式),B=(B1,B2,…,Bn)T,C=(C1,C2,…,Cn)T,Mi=(m1,m2,…,mn)T
  • 对密文分组Ci的解密为:
  • Mi=(A-1(Ci-B)) mod N,i=1,2,…,j

例题如下:在这里插入图片描述

  • 表1-2就是上图的Vigenera(维吉尼亚)密码表

在这里插入图片描述

  • 做这些题,很吃线性代数的知识,比如行列式的逆 mod 26的时候,在求该行列式的逆如果使用行变换就不可以,必须利用AA*=|A|这个公式,从而A-1= A ∗ ∣ A ∣ \frac{A^*}{|A|} AA

加密完之后,就需要解密了:
在这里插入图片描述
在这里插入图片描述注意这里A-1的求法:

在这里插入图片描述
要好好学线代了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺旺的碎冰冰~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值