仿射密碼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](
