仿射密码解析与实例

仿射密码的加密函数是 E(x)=(ax+b)(modm)
其中

  1. x表示明文按照某种编码得到的数字
  2. a和 m互质
  3. m是编码系统中字母的数目

解密函数是 D(x)=a−1(E(x)−b)(modm),D(x)和E(x)均代表数字,a,b是密钥,0≤a,b≤m.
其中gcd(a,26)表示a和26的最大公因,gcd(a,26)=1表示a和26是互素的.

a-1表示a的逆元,即a-1*a ≡ 1mod26。

加密算法:c = am + b(mod n)
加密过程:
1.获取a,b,n;(若未知)
2.获取明文字符串;
3.将每一个明文字符转换成对应的数字;
4.将明文数字带入公式c = a
m + b(mod n),获取密文对应数字;
5.将密文数字转换成对应的密文字符。

解密过程:
1.获取a,b,n; (若未知)
2.获取密文字符串; (若未知)
3.寻找a^-1:
(1)设置数组coprime为存放与n互素的元素
(2)获取value1,value2的最大公约数
(3)在coprime中寻找a的模可逆元a^-1
4.
(1)将每一个明文字符转换成对应的数字;
(2)将明文数字带入公式c = a*m + b(mod n),获取密文对应数字;
(3)将密文数字转换成对应的密文字符。

下面我们以 E(x)=(5x+8)mod26

函数为例子进行介绍,加密字符串为 AFFINE CIPHER,这里我们直接采用字母表26个字母作为编码系统

在这里插入图片描述
其对应的加密结果是 IHHWVCSWFRCP。
对于解密过程,正常解密者具有a与b,可以计算得到 a^−1为 21,所以其解密函数是D(x)=21(E(x)−8)(mod26),解密如下:
在这里插入图片描述

破解

1.我们可以看到的是,仿射密码对于任意两个不同的字母,其最后得到的密文必然不一样,所以其也具有最通用的特点。当密文长度足够长时,我们可以使用频率分析的方法来解决。

2.当知道任意一个参数,那我们便可以很容易地快速枚举另外一个参数得到答案。以26个英语字母为例,一共有可能的密钥空间大小也就是12×26=312.

3.在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值