密码学课设3 仿射密码的攻击

问题描述:

仿射密码系统用五元组(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

猜你喜欢

转载自blog.csdn.net/qq_38115310/article/details/87966442
今日推荐