ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-12-19 22:05:29  阅读:1113  来源: 互联网

标签:13 23 SAGEMATH SAGE 41 result print 密码学 mod


求逆元

inv=inverse_mod(30,1373)
print(30*inv%1373) #1

扩展欧几里得算法

d,u,v=xgcd(20,30)
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

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

求离散对数

2 x 2^x 2x ≡ ≡ ≡ 13 13 13 m o d mod mod 23 23 23

x=discrete_log(mod(13,23),mod(2,23))
#或discrete_log(13,mod(2,23))
print(x)

取模求根

x 2 x^2 x2 ≡ ≡ ≡ 5 5 5 m o d mod mod 41 41 41

x=mod(5,41)
r=x.nth_root(22)

欧拉函数

print(euler_phi(71)) #70

输出表达式近似值

result=pi^2
result.numerical_approx()

素数分布(Pi(x))

π ( x ) x / I n ( x ) \frac{\pi(x)}{x/In(x)} x/In(x)π(x)​

result=prime_pi(1000)/(1000/log(1000))
result.numerical_approx() #1.16050288686900

创建整数域中的椭圆曲线

y 2 = x 3 + a 4 x + a 6 y^2=x^3+a_4x+a_6 y2=x3+a4​x+a6​

a4=2;a6=3;F=GF(7);
E=EllipticCurve(F,[0,0,0,a4,a6])
print(E.cardinality()) #6
print(E.points()) #[(0 : 1 : 0), (2 : 1 : 1), (2 : 6 : 1), (3 : 1 : 1), (3 : 6 : 1), (6 : 0 : 1)]

创建点

point1=E([2,1])
point2=E([3,6])
print(point1+point2)#(6 : 0 : 1)
print(point1-point2)#(2 : 6 : 1)

标签:13,23,SAGEMATH,SAGE,41,result,print,密码学,mod
来源: https://blog.csdn.net/m0_46591654/article/details/111410909

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有