仿射密码 ctf
程序员文章站
2022-07-09 12:40:58
...
仿射密码
Buuctf- Crypto-[GKCTF2020]小学生的密码学
e(x)=11x+6(mod26)
密文:welcylk
- 原理
改密码运用乘法逆元和模运算。az对应于025, 将明文的每个字符转为对应的数字
加密函数 E(x)=(a*x+b)(mod 26) a,b为**,a必须与26互质
解密函数 D(x)=a^(-1) (x-b)(mod 26) a^(-1) 为a关于26的乘法逆元
- 分析
已知加密函数e(x)=11x+6(mod 26)。
求出11关于26的乘法逆元19,则D(x)=19*(x-6)(mod 26)
- 脚本
import base64
# 求逆元
from gmpy2 import invert
x= invert(11,26) #x=19为逆元
c = 'welcylk'
m=''
for i in c:
s = ord(i)-97
q = chr((((s-6)*x) % 26)+97)
m+=q
print(m)
print(base64.b64encode(m.encode('utf-8')))
- 答案
flag{ c29yY2VyeQ==}