sage安装

Sage可以干什么?介绍中有这么一句:“这款开源软件的支持者称Sage能够完成从12维物体到计算全球变暖效应数学模型中的降雨量的任何事情。”Sage包含了从线性代数、微积分,到密码学、数值计算、组合数学、群论、图论、数论等各种初高等数学的计算功能。

Sage的一大特点是整合了众多优秀的开源数学软件,使用户可以在Sage中方便的使用这些库中的相应功能。Sage目前整合了近一百个开源的数学库,这其中包括著名的ATLAS、BLAS、LAPACK、Boost、GSL、SciPy等等,完整列表可以查看这里。

Sage基于并使用Python,Python程序可以在Sage中直接运行,也可以在Sage中使用Python的各种库,感觉就像是提供了一个包含各种数学功能的Python环境。

安装

这里介绍linux下的安装。
官网下载地址:http://www.sagemath.org/
根据自己的环境找到安装包,我这里安装的是http://mirror.hust.edu.cn/sagemath/linux/64bit/index.html下的64位的包。

下载好之后用以下命令:

1
2
tar xvf sage-8.0-Ubuntu_16.04-x86_64.tar.bz2
cd SageMath

然后就能使用sage工具了,使用命令如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ ./sage
Rewriting paths for your new installation directory
===================================================
This might take a few minutes but only has to be done once.
patching /home/user/tmp/SageMath/src/build/cythonized/sage/structure/list_clone.c
(snip)
patching /home/user/tmp/SageMath/src/build/cython_debug/cython_debug_info_sage.gsl.ode
┌────────────────────────────────────────────────────────────────────┐
│ SageMath Version 6.10, Release Date: 2015-12-18 │
│ Type "notebook()" for the browser-based notebook interface. │
│ Type "help()" for help. │
└────────────────────────────────────────────────────────────────────┘
sage:

这样是用交互式来使用sage。

如果是想使用.sage代码的话,直接执行以下命令:

1
./sage ***.sage

即可运行sage文件

效果

这里介绍Coppersmith partial information attack这种算法的sage代码的payload,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
p4 = 0xf3a5f928e11c5901f9f4289e513f046748efb99d4f8e706e207a943e1d2c9df43feab38e20c2106d87167e5501ac41adfc4912732457103a4359e5b433da78f39ad6f206b8f170192aa0841feb501ce1
n = 0x7e7007c7c85788b9b77cda64c9b3f5d2a795fe1b1f8d3f120288a30a168c3ea932c7574700ff0f596c5ad04a703756aedc66b9b9e44911d55f0a72a1cc1a569cee02a84499cdb091b8471a8e6cc0ebca583dfd6fb8d5fecf32ff67d2ddeaaaaf9c71a10009b4218fc57743675f283d22734ac7ade2ca240772d11b5783755378f7c30988f41d4a9d62561ea6e5f2f21d3d44e8689e781d3f61356123929457d17b07a1d04741bf970afb590cd820dd12cf88f68b0e896388f433fd2adf3354353c9c56abb0cfea223387e6d0b2df10e450c621ac153e47369f888fdc0b39c842a5ddc6a11339862ccdb4be97a81445205fb8f8bde9daaad5d0dc2ea5bd3b8c43
pbits = 1024
kbits = pbits - p4.nbits()
print p4.nbits()
p4 = p4 << kbits
PR.<x> = PolynomialRing(Zmod(n))
f = x + p4
x0 = f.small_roots(X=2^kbits, beta=0.4)[0]
print "x: %s" %hex(int(x0))
p = p4+x0
print "p: ", hex(int(p))
assert n % p == 0
q = n/int(p)
print "q: ", hex(int(q))

就是已知rsa算法中的p的高位p4,然后可以分解出p,q
运行结果如下:

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 安装
  2. 2. 效果
,