? ? ? ? ?Sage(或稱SageMath)是在GPL協(xié)議下發(fā)布的開源數(shù)學(xué)軟件,并且整合了許多已有的開源軟件包到一個(gè)基于Python的統(tǒng)一界面下。其目標(biāo)是創(chuàng)造一個(gè)Magma,Maple,Mathematica和Matlab的開源替代品。
???????? Sage包含了從線性代數(shù)、微積分,到密碼學(xué)、數(shù)值計(jì)算、組合數(shù)學(xué)、群論、圖論、數(shù)論等各種初高等數(shù)學(xué)的計(jì)算功能。
安裝
這里介紹在Kali-Linux-2018.2 64bit下的安裝。
官網(wǎng)下載地址:http://www.sagemath.org/download-linux.html
根據(jù)自己的環(huán)境挑選安裝包,我安裝的是64位的包sage-8.1-Debian_GNU_Linux_8-x86_64.tar.bz2
使用
下載完以后,用下列命令
tar xvf sage-8.1-Debian_GNU_Linux_8-x86_64.tar.bz2
cd SageMath
./sage
第一次進(jìn)入會(huì)耗費(fèi)比較長的時(shí)間,以后會(huì)好很多。進(jìn)入后的界面如下所示。

直接在sage:提示符后敲入命令即可。下面的例子,即為求2013的質(zhì)因子

如果想使用.sage代碼的話,直接運(yùn)行一下命令
./sageXXX.sage
下圖為執(zhí)行cm5.sage的效果。

寫sage代碼要求對(duì)相應(yīng)函數(shù)十分熟,可以從官網(wǎng)上獲取幫助:
http://doc.sagemath.org/html/en/reference/genindex.html
下面為cm5.sage文件內(nèi)容,具體含義就不解釋了
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