问题描述:
仿射密码系统用五元组(P,C,K,E,D)表示,设P=C={计算机学院网络工程信息安全,我们热爱中华人民共和国。大家…}.现在截获了一段密文“和院程安我爱计”。请编程分析出明文。
直接代码:
# 定义明文空间和密文空间 z = '计算机学院网络工程信息安全,我们热爱中华人民共和国.大家' c = '和院程安我爱计' # 求最大公因数 def gcd(n, m): if n < m: temp = n n = m m = temp while m != 0: r = n % m n = m m = r return n # 设置全局变量p p = 1 # 求出c在z中的位置 position = [] for i in c: position.append(z.find(i)) for a in range(2, 28): if gcd(a, 28) == 1: for b in range(2, 28): if (a * b) % 28 == 1: p = b # 求出a的乘法逆元 for b in range(0, 28): # t = '' for i in position: i1 = p * (i - b) % 28 t = t + z[i1] if t[0] == '我': # 简单过滤 print(t, '此时A =', a, "B =", b) 这里的原理:由于放射密码的加密方法是c = am + b mod 28
所以求明文的方法是dk(c)=a-1(c-b)mod 28