一杯敬故乡,一杯敬远方。
算法分析
1.仿射密码结合了移位密码和乘数密码的特点,是移位密码和乘数密码的组合。
2.仿射密码的加密算法就是一个线性变化,即对明文字符x,对应的密文字符为y=ax+b(mod26)
其中,a, b
属于Z26
且gcd(a,b)=1
3.实现过程:
- 选取
a,b
两个参数,其中gcd(a, 26)=1
- 加密变换:
c= a∗𝑚+b 𝑚𝑜𝑑 26
a=1
时,移位密码
b=1
时,乘数密码 - 解密变换:
𝑚= (c−b)∗a^(−1) 𝑚𝑜𝑑 26
算法实现
# 暴力破解
la = [1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25]
lb = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
# 最大公约数
def gcd(a, b):
while b != 0:
tem = a % b
a = b
b = tem
return a
# 加密
def encrypt(m, c, a, b):
for i in range(len(m)):
# 加密成相应的大写字母
c.append(chr(((ord