百度百科傳送門
基於迪菲-赫爾曼密鑰交換的非對稱加密算法
EIGamal公開密鑰密碼體制是基於有限域中離散對數間題的難解性。它所根據的原理是:求解離散對數是困難的,而其逆運算可以應用平方乘的方法有效的計算出來。在相應的群G中,指數函數是單向函數。
運行報錯、超時請看說明
import prime
import random
import math
p=prime.safe_length(150)
g=prime.safe_root(p)
a=random.randint(2, p)
ga=pow(g,a,p)
print('公鑰:('+str(p)+',\n'+str(g)+',\n'+str(ga)+')')
#print('私鑰:'+str(a))
mb=prime.length(149)#int(input('m:'))
print('\nB\'s input:\n'+str(mb))
k=random.randint(1, p-1)
while math.gcd(p-1, k)!=1:
k=random.randint(1, p-1)
c1=pow(g, k,p)
c2=((mb%p)*pow(ga,k,p))%p
print('\ncyphertext:('+str(c1)+',\n'+str(c2)+')')
v=pow(c1,a,p)
ma=(c2*prime.modinv(v,p))%p
print('\nA\'s output:\n'+str(ma))
print(ma==mb)#明文比對