文章目錄
前言
網鼎杯划水,害,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