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

文章目录求逆元扩展欧几里得算法孙子定理(中国剩余定理)求离散对数欧拉函数输出表达式近似值素数分布(Pi(x))创建整数域中的椭圆曲线
求逆元
inv=inverse_mod(30,1373)
print(30*inv%1373) #1
12
扩展欧几里得算法
d,u,v=xgcd(20,30)
print("d:{0} u:{1} v:{2}".format(d,u,v))#d:10 u:-1 v:1
12
孙子定理(中国剩余定理)
计算参考:
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
12345678
求离散对数
2x≡13mod232x≡13mod23       2^x \equiv13 \mod232x≡13mod23
x=discrete_log(mod(13,23),mod(2,23))
#或discrete_log(13,mod(2,23))
print(x)
123
欧拉函数
print(euler_phi(71)) #70
1
输出表达式近似值
result=pi^2
result.numerical_approx()
12
素数分布(Pi(x))
π(x)x/In(x)π(x)x/In(x)      \frac{\pi(x)}{x/In(x)}x/In(x)π(x)​
result=prime_pi(1000)/(1000/log(1000))
result.numerical_approx() #1.16050288686900
12
创建整数域中的椭圆曲线
y2=x3+a4x+a6y2=x3+a4x+a6      y^2=x^3+a_4x+a_6y2=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)]
1234
创建点
point1=E([2,1])
point2=E([3,6])
print(point1+point2)#(6 : 0 : 1)
print(point1-point2)#(2 : 6 : 1)
————————————————
版权声明:本文为CSDN博主「qq_39642801」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39642801/article/details/104158699

你可能感兴趣的:(SAGE(SAGEMATH)密码学基本使用方法)