Cata1yst's blog

祇今尚有清流月,曾照高王万马过

0%

函数备忘录(不定期更新)

python

pwn库
1
2
3
4
5
6
7
8
9
from pwn import * #引入pwn库
s=remote("",) #连接,两个参数好像叫post和host(来个好鸽鸽浇浇我罢),类似还有process用来连本地
s.send()#发送全部
s.sendline()#发送完后加上'\n'
s.recv(n) #接收nbit数据
s.recvline()#接收一行
s.recvuntil("")#接收到该字符串结束,以'\n'为标志
s.recvall()#全收了
s.close()#关闭
string库
1
2
3
4
5
6
7
8
import string#在某些词频分析或者遍历的时候可以方便一点
string.ascii_letters()#英文字母,小写在前
string.ascii_lowercase()#小写字母
string.ascii_uppercase()#大写字母
string.digits()#0~9
string.hexdigits()/string.octdigits()#十六进制/八进制数
acsii.punctutation()#acsi符号 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
string.printable()#可打印的字符
hashlib库
1
hashlib.sha256(buf.encode('utf-8')).hexdigest()#import hashlib
itertools库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#没什么用的库,做一些迭代操作,一般只用到cycle来循环加密,不过既然要写就多写一点叭
import itertools

#根据start和step生成一个自然数列表(本质上应该是生成器,但用法和列表是一样的,后面的函数也差不多)
counter=itertools.count(start,step)

#把base的内容无限循
cycler=itertools.cycle(base)

#无限循环element,如果times存在就重复times次
repeater=itortools.repeat(element,times)

#根据截取无限序列的一部分,满足函数function时保留; 还有一个dropwhile函数与之相反
counter_part=itertools.takewhile(function,counter)

#把a,b里面的元素合起来给s,好像没什么用
s=itertools.chain(a,b)

#累积运算,默认是加法,初始值为0(乘法时是1),每次和group的一个元素运算,结果添加到sum
sum=itertools.accumulate(group)

#由group中所有 "长度为count并且没有重复元素" 的子集构成的集合;另有函数itertools.accumulate_with_replacement(),允许子集中有重复元素
itertools.combinations(group,count)

gmpy2库

1
2
3
4
import gmpy2

#jacobi符号
j=gmpy2.jacobi(m,n)

sagemath

matrix相关
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#生成矩阵  ZZ(QQ,GF(n)...)表示矩阵生成的基本环 ; list是矩阵元素组成的列表 ; a,b表示矩阵的行列(选填)
M=mtarix(ZZ[,a,b],list)

#末尾添行
M=M.stack(vector(list))

#求秩
M.rank()

#求行/列数
M.nrows() / M.ncols()

#求值
M.determinant() / M.det()

#求逆
mt.is_invertible() #是否可逆
M.inverse()
M=M^(-1)

#转置
M=M.transpose()

#解方程
#Ax=B
x=A.solve_right(B)
#xA=B
x=A.solve_left(B)
#xA=0
x=A.left_kernel()
#Ax=0
x=A.right_kernel()
#格基规约
M=M.LLL()
群论相关
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#有限域

G1=GF(7,modulus='primitive') #用原本元生成域
G=GF(n) #定义了一个有限域G

a=G(k) #定义了G中的元素a(之后对a运算默认在G中)
x=a.nth_root(i) #求根 x^i=a(mod n),当i=2时可以用a.sqrt()
f=G.modulus() / x=G.gen() #生成模多项式和它的根(暂时不知道有什么用)

#整数环

r=Zmod(n) / r=Integer(n) #生成环

a=r(k) #定义环上的变量a
a=a^-1 #求逆
a=a.log(x) #求离散对数
a=a.sqrt() #求平方根
a.multiplicative_order() / a.additive_order() #求乘法/加法的阶

#多项式环

R.<x[,y,...]>=ZZ[] #定义整数多项式环,变量为x[,y,...]
R.<x>=Zmod(n)[] / R.<x>=GF(n)[] #定义有限域的多项式
R.<x>=PolynomialRing(Zmod(N)) / R=PolynomialRing(Zmod(N).'x') #定义有限域的多项式


f=R([c0,c1,...])/f=c0*x^i... #定义环上的多项式f
f.factor() #分解多项式
d=f.degree() #多项式的次数/度
f.gcd(g) / gcd(f,g) #欧几里得算法(xgcd同理)
f.roots() #求根,返回根值和重数
f.change_ring(R2) #更改多项式所在环

q2.resultant(q1) #求结式(对两个多元多项式消元的魔法),仅在q1,q2定义在多变量环上使用
数论相关
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#扩展欧几里得算法
g,r,s=xgcd(a,b) #g=r*a+s*b

#分解质因数
factor(20) #2^2*5
prime_divisors(20) #[2,5]
p,q=qsieve(n)[0] #二次筛法,可分解大致200位的n
p,q=ecm.factor(n) #GMP-ECM算法

#中国剩余定理
x=crt(res,mod)

#欧拉函数
phi=euler_phi(n)

#模逆
x=inverse_mod(a,n)
x=power_mod(a,-1,n)

#取整
#向上取整
x=x.ceil()
x=ceil(x)
#向下取整
x=floor(X)
x=x.floor()
密码学相关(虽然前面也是)
1
2
3
4
#离散对数
#如果在有限域上运算可以省略其中的mod
x=discrete_log(mod(y,n),mod(g,n)) #y=g^x(mod n)
x=discrete_log_rho(mod(y,n),mod(g,n))#Pollard-Rho算法

docker命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#有些命令不唯一,只记录本人习惯的几个
#检查安装
docker -v

#检索
docker search ImageName

#查看镜像
docker images
docker images ImageName#列出该名字的所有镜像

#查看容器
docker ps#运行中
docker ps -a#全部

#下载镜像
docker pull ImageName

#删除镜像
docker rmi ImageName
docker rmi $(docker image -q) #全删了

#容器基本操作
docker start ContainerId#运行
docker stop ContainerId#中止
docker rm ContainerId#删除
docker rm $(docker ps -a -q)#全删了
docker kill ConatinerId#强制结束
docker restart ContainerId#重启
docker logs ContainerId#查看容器日志

#进入容器终端
docker exec -it ContainerId /bin/bash #这个好像要容器在运行才行(?)
docker attach ContainerId #同上

#复制文件 Path1为容器内地址,Path2为物理机地址
docker cp ContainerId:Path1 Path2 #容器->物理机
docker Path2 ContainerId:Path2 #物理机->容器

#容器保存为镜像
docker commit [-m="description"] [-a="autho"] ContainerName|ConatinerId ImageName[:"Label"]
#容器备份
docker save -o Path ImageName:Label
#恢复镜像
docker load -i ImageName:Label #上传备份文件