文章目录
前言
网鼎杯划水,害,3人组队结果我pwn拖了后腿…没能进下线了。
比赛过程做了两题Crypto,写个博客记录一下sagemath和python中z3库的用法。
sagemath用法
1.sagemath计算离散对数
离散对数问题可以描述为:给定一个质数p,和有限域Zp上的一个本原元a,对Zp上整数b,寻找唯一的整数c,使得a^c≡b(mod p)。一般的,如果仔细选择p,则认为该问题是难解的,且目前还没有找到计算离散对数问题的多项式时间算法。为了抵抗已知的攻击,p至少应该是150位的十进制整数,且p-1至少有一个大的素数因子。
RSA是基于大整数分解难题来保证算法安全性,RSA算法的安全性要远小于离散对数的安全性。
但是在求解上,二者有一些相同的地方。
简单来说,a^c≡b(mod p),在离散对数问题中,求的是c。但是在RSA中,就是要求a。
x=discrete_log(mod(13,23),mod(2,23))
#或discrete_log(13,mod(2,23))
print(x)
2.sagemath求逆元
b=inverse_mod(a,p)
print(a*b%p) #1
3.sagemath扩展欧几里得算法
扩展欧几里得算法:给予二整数 a 与 b, 必存在有整数 x 与 y 使得ax + by = gcd(a,b).
d,u,v=xgcd(20,30)
print("d:{0} u:{1} v:{2}".format(d,u,v))#d:10 u:-1 v:1
4.sagemath孙子定理(中国剩余定理)
在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题称为“孙子问题”,该问题的一般解法国际上称为“中国剩余定理”。
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
5.sagemath求欧拉函数
print(euler_phi(71)) #70
6.sagemath输出表达式近似值
result=pi^2
result.numerical_approx()
7.sagemath素数分布(Pi(x))
result=prime_pi(1000)/(1000/log(1000))
result.numerical_approx() #1.16050288686900
8.sagemath创建整数域中的椭圆曲线
输出所有整数点:
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)
sagemath在密码学中的使用方法
sagemath安装
sagemath在线环境
python z3库
我搞z3库搞了一晚上…
z3库不是微软开发的吗?怎么windows上配置老是出错…
我pip和微软推出的dll方式都试过了,一个是pip报错,另外一个是配置环境变量报错…
windows下安装Z3
于是转向kali linux 安装z3
linux下安装z3
git clone https://github.com/Z3Prover/z3.git
cd z3
python scripts/mk_make.py
cd build
make
sudo make install
这个安装好之后是这样的
然鹅我想作为python的模块使用
下载z3_solver-4.8.7.0-py2.py3-none-manylinux1_x86_64.whl文件之后
链接:https://pan.baidu.com/s/17jMA50B-oSdcj2nwsgL0aA
提取码:uhu3
python3 -m pip install z3_solver-4.8.7.0-py2.py3-none-manylinux1_x86_64.whl