效果
代码
from encryption_algorithm import Euclid
import random
class ECC:
def __init__(self, coe: list, p: int, G: list):
self.coe = coe
self.p = p
self.G = G
def add(self, a: list ,b: list)-> list:
euc = Euclid.euclid()
a_x, a_y = a[0], a[1]
b_x, b_y = b[0], b[1]
if(a_x!=b_x):
c = (b_y - a_y) * euc.get_valid_X_Y(self.p, (b_x-a_x)%self.p, ret_String=False)[1]
c %= p
elif((a_y+b_y)%p!=0):
c = (3 * a_x**2 + self.coe[0]) * euc.get_valid_X_Y(self.p, (2*a_y)%self.p, ret_String=False)[1]
c %= self.p
else:
return None
x = (c**2 - a_x - b_x) % self.p
y = (c*(a_x - x) - a_y) % self.p
return [x, y]
def mul(self, n: int, T: list)-> list:
res = T
while(n>1):
res = self.add(res, T)
if(res==None):
print("横坐标相等, 纵坐标为相反数, 不可计算!!!")
return None
n -= 1
return res
if __name__=='__main__':
coe = [1, 1]
p = 23
n = 27
G = [0, 1]
dh_ecc = ECC(coe, p, G)
n_a = 5
n_b = 11
mul_a = dh_ecc.mul(n_a,G)
mul_b = dh_ecc.mul(n_b,G)
Share_a = dh_ecc.mul(n_a,mul_b)
Share_b = dh_ecc.mul(n_b,mul_a)
print('用户a计算出的共享密钥: {}'.format(Share_a))
print('用户b计算出的共享密钥: {}'.format(Share_b))