安全矩阵

 找回密码
 立即注册
搜索
查看: 5000|回复: 0

SAGE(SAGEMATH)密码学基本使用方法

[复制链接]

46

主题

165

帖子

731

积分

高级会员

Rank: 4

积分
731
发表于 2020-5-11 15:07:22 | 显示全部楼层 |阅读模式
求逆元
  1. inv=inverse_mod(30,1373)
  2. print(30*inv%1373) #1
复制代码

扩展欧几里得算法

  1. d,u,v=xgcd(20,30)
  2. print("d:{0} u:{1} v:{2}".format(d,u,v))#d:10 u:-1 v:1
复制代码




孙子定理(中国剩余定理)
计算参考:
https://blog.csdn.net/destiny1507/article/details/81751168

  1. def chinese_remainder(modulus, remainders):
  2.     Sum = 0
  3.     prod = reduce(lambda a, b: a*b, modulus)
  4.     for m_i, r_i in zip(modulus, remainders):
  5.         p = prod // m_i
  6.         Sum += r_i * (inverse_mod(p,m_i)*p)
  7.     return Sum % prod
  8. chinese_remainder([3,5,7],[2,3,2]) #23
复制代码


求离散对数


  1. x=discrete_log(mod(13,23),mod(2,23))
  2. #或discrete_log(13,mod(2,23))
  3. print(x)
复制代码



欧拉函数
  1. print(euler_phi(71)) #70
复制代码



输出表达式近似值
  1. result=pi^2
  2. result.numerical_approx()
复制代码



素数分布(Pi(x))

  1. result=prime_pi(1000)/(1000/log(1000))
  2. result.numerical_approx() #1.16050288686900
复制代码



创建整数域中的椭圆曲线

输出所有整数点
  1. a4=2;a6=3;F=GF(7);
  2. E=EllipticCurve(F,[0,0,0,a4,a6])
  3. print(E.cardinality()) #6
  4. print(E.points()) #[(0 : 1 : 0), (2 : 1 : 1), (2 : 6 : 1), (3 : 1 : 1), (3 : 6 : 1), (6 : 0 : 1)]
复制代码
创建点
  1. point1=E([2,1])
  2. point2=E([3,6])
  3. print(point1+point2)#(6 : 0 : 1)
  4. print(point1-point2)#(2 : 6 : 1)
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-27 23:55 , Processed in 0.015130 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表