题目解析
key1=pow(g1,a*(p-1),n)
c=(pow(key1,b,n)*m)%n
key1=(g1^a*(p-1))%n
key1=((g1^a)^(p-1))%n
#设g1^a=ga
key1=(ga^(p-1))%n
key1=ga^(p-1)+kn
#两边同时莫上p
key1%p=ga^(p-1)%p+kn%p
#根据费马小定理
#a^(p-1)%p=1 p为素数,n=p*q
key1%p=1+0
key1%p=1
key1-1=kp
#利用公约数
p=gcd(key1-1,n)
c=(pow(key1,b,n)*m)%n
#key1=(ga^(p-1))%n
c=(((ga^(p-1))%n)^b%n*m)%n
c=((ga^(p-1))^b%n*m)%n
c=((ga^b)^(p-1)%n*m)%n
#设ga^b=gab
c=gab^(p-1)%n*m)%n
c=gab^(p-1)*m+kn
#两边同时莫上p
c%p=gab^(p-1)%p*m%p
#根据费马小定理
#a^(p-1)%p=1 p为素数,n=p*q
c%p=m%p
#因为m<p
p=gcd(key1-1,n)
c%p=m