sagemath matlab,使用SageMath

A = 0xd9d8bd32fc078af28cb318a7ae07227accf335a1a02eddff421a50b7eceb9fd7

B = 0xfffffffeffffffffffffffffffffffff000000000000000000000001

M = 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff

x = 0xfa00a8d4d5755ae92322a317c3b1895d935ed95a36b4e4589328d7b7214a5d35

y = 0xaeeb0346ec45386861311d68619391181116843e51e91c7d80a17faa47792fe8

x1 = 0x739ca3c42d60579b8ab304fe511eb7501343d3a951a85ec67e74cfb88fdde40b

y1 = 0x3bcc7adbf46e9ce70453644e27b6947e7382c23c315f5ea7847f6cb4f10b62a2

P = (x, y)

Q = (x1, y1)

F = FiniteField(M)

E = EllipticCurve(F,[A,B])

P = E.point(P)

Q = E.point(Q)

print factor(E.order())

factors, exponents = zip(*factor(E.order()))

primes = [2, 4, 2137, 7649, 63127, 33636409, 55866443, 194282080159,269685708029]

dlogs = []

for fac in primes:

t = int(P.order()) / int(fac)

dlog =discrete_log(t*Q,t*P,operation="+")

dlogs += [dlog]

print("factor:"+str(fac)+", Discrete Log: "+str(dlog))

#The result after run

l = crt(dlogs,primes)

print(l)

print P*l == Q

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值