古典密码-仿射密码Affine
仿射密码Affine基础知识
仿射密码属于一种替换密码,通过对一个字母使用加密函数(模运算)生成另外一个字母(某些情况下,不只是字母)。
加密函数:
- a、b:函数的参数部分,不同的加密有不同的值
- m:字母的数量,一般值为26、32等
- a与m互质
解密函数:
- \(a^{-1}\)是a关于模m的乘法逆元
上述解密函数的式子是相对于加密函数而言的,特殊情况下(直接要得到解密函数的参数时)可以直接设解密函数为y = a*x + b (mod Z)
举个栗子
加密
以加密函数 \(E(x) = (5x + 8) (mod 26)\) 为例,以字母表26个字母作为编码系统
明文 | A | F | F | I | N | E | C | I | P | H | E | R |
---|---|---|---|---|---|---|---|---|---|---|---|---|
x | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
y = 5x+8 | 8 | 33 | 33 | 48 | 73 | 28 | 18 | 48 | 83 | 43 | 28 | 93 |
y mod 26 | 8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
密文 | I | H | H | W | V | C | S | W | F | R | C | P |
对应的加密结果为:IHHWVCSWFRCP
解密
在已知a = 5,m = 26的情况下,我们需要求a关于模m的逆元,
根据乘法逆元的定义,我们可以得到如下式子:
带入参数,有\(5·a^{-1} ≡ 1(mod 26)\) ,可以得到\(a^{-1}\) = 21
因此解密函数为:\(D(x) = 21(x - 8) (mod 26)\)
密文 | I | H | H | W | V | C | S | W | F | R | C | P |
---|---|---|---|---|---|---|---|---|---|---|---|---|
y | 8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
x = 21(y−8) | 0 | -21 | -21 | 294 | 273 | -126 | 210 | 294 | -63 | 189 | -126 | 147 |
x mod 26 | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
明文 | A | F | F | I | N | E | C | I | P | H | E | R |
解密后的明文结果为:AFFINECIPHER
相关题目
题目来源:https://adworld.xctf.org.cn/task/answer?type=crypto&number=5&grade=1&id=5535&page=1
题目信息
题目分析
- 改题目源自
bitsctf-2017
,对BITSCTF
这几个字符进行base32
加密得到IJEVIU2DKRDA====
base32加密网站 - 与文件所给的字符进行对比
M Z Y V M I W L G B L 7 C
I J E V I U 2 D K R D A ====
可以看到M和I一直都是对应的,故想到移位加密和仿射加密,易排除移位加密
- 反射密码的解密需要解密函数,但这里并没有解密函数,我们需要先得到解密函数
for a in range(-20,20):
for b in range (-20,20):
if (a*12+b)%32 == 8 and (a*25+b)%32 == 9:
print(a,b)
可以得到a=5 b=12(多增加IF处的判断语句就可以更加精确)
- 得到了ab,使用解密公式
y = a*x+b (mod32)
c = "MZYVMIWLGBL7CIJOGJQVOA3IN5BLYC3NHI"
sn = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
msg = ""
for i in c:
msg += str(sn[(5*sn.find(i)+12)%32])
print(msg)
得到IJEVIU2DKRDHWUZSKZ4VSMTUN5RDEWTNPU
放入base32
解密得到BITSCTF{S2VyY2tob2Zm}
参考资料
https://www.cnblogs.com/Mayfly-nymph/p/12394329.html
https://www.bilibili.com/video/BV1Gh411o7vM?t=332
https://www.bilibili.com/video/BV1qE411i7Zq?t=535
需fanqiang
:
[仿射密码ctf-wiki](