【密码学】RSA加密与解密(Python)

试着解密该信息(注意,最后得到的数字需要整体平移,才能得到有意义的明文)(私钥后四个数字是5691)。

提示:使用模重复平方算法以及中国剩余定理降低计算量。

你向外发送的信息如下:

5272281348,21089283929,3117723025,26844144908,22890519533,26945939925,27395704341,2253724391,1481682985,2163791130,13583590307,5838404872,12165330281,501772358,7536755222。

该信息使用RSA进行加密,参数如下:

p = 187963,q = 163841,n = pq = 30796045883,公钥为e =48611。

def extendGcd(m, b):
    if m < b:
        m,b=b,m
    A1, A2, A3 = 1, 0, m
    B1, B2, B3 =  1, 0,b
    while True:
        if B3 == 0:
            return 'None'
            break
        elif B3 == 1:
            return B1 % m
            break
        else:
            Q = A3 // B3
            T1, T2, T3 = A1 - Q * B2, A2 - Q * B1,A3 - Q * B3
            A1, A2, A3 = B2,B1, B3
            B2, B1, B3 = T1,T2,T3

def RSA(p, q, e , c):
    fn = (p - 1) * (q - 1)
    d = extendGcd(e, fn) % fn
    n = p*q

    d = bin(int(d))
    d = d.replace('0b', '')
    d = d[::-1]
    a = [1]
    b = [int(c)]
    n = int(n)

    cum = 0
    for i in d:
        if int(i) > 0:
            a.append(a[cum] * b[cum] % n)
        else:
            a.append(a[cum] % n)
        if cum < len(d):
            b.append(b[cum] * b[cum] % n)
            cum = cum + 1

    return a[cum]

p = int(input("请输入第一个大整数p: "))
q = int(input("请输入第二个大整数q: "))
e = int(input("请输入公钥e: "))
print('请输入密文:')
num = list(input().split(','))
for i in range(len(num)):
    num[i] = int(num[i])

mingwen=[]
for i in range(len(num)):
    mingwen.append(RSA(p, q, e,num[i]))

print(mingwen)

最终得到的明文是:

231130181523113019132919293018152731151524251629131915241315112414243123121528301815252835192930181527311515242516231130181523113019132913161711312929

我们观察这串数字,猜测可能是两个数字表示一个拉丁字母。如果每两个数字为一组,那么最小的是11,最大的是35,从1135一共有25个数,与拉丁字母数量的26个十分接近,也印证了我的猜测。于是继续观察,发现301815出现了多次,猜测它代表单词“the”,那么11代表“a”,12代表“b”,13代表“c”……36代表“z”。按照此规则,译制出的信息为:

mathematicsisthequeenofscienceandnumbertheoryisqueenofmathematicscfgauss

这是德国数学家高斯的一句名言:

“Mathematics is the queen of science and number theory is queen of mathematics.”

——C. F. Gauss

「数学是科学的皇后,而数论是数学的皇后。」

                                           ——卡尔·弗里德里希·高斯

你可能感兴趣的:(安全)