参数选取:模数n=26+10=36,k2为学号后2位;k1为与学号后2位最近的素数。
加解密:加密自己名字的全拼,再解密。
密钥 k = (k1 , k2)
仿射密码加解密算法是: m:是输入的明文
C= Ek(m)=(k1m+k2) mod n
M= Dk(c)=k3(c- k2) mod n (其中(k3 ×k1)mod26 = 1,即k3是k1的逆元)
求取逆元的过程代码如下:
def get_gcd(a, b):
k = a // b
remainder = a % b
while remainder != 0:
a = b
b = remainder
k = a // b
remainder = a % b
return b
#改进欧几里得算法求线性方程的x与y
def get_(a, b):
if b == 0:
return 1, 0
else:
k = a // b
remainder = a % b
x1, y1 = get_(b, remainder)
x, y = y1, x1 - k * y1
return x, y
a &