Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 32 additions & 19 deletions Cry/submissions/26-Cry-Bu-666-coquerr.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
![作业截图](123.png)

作业一:
【结果】
[作业截图](123.png)

# 作业一:
## 【结果】
计算出的私钥 d 为:
79207981603943158726342183501779498060887007919090529125944823321702668048201689505972813194857982765709487932291240004251663951673457580264860941532435588683621436899173175161302810123020953081054829086674128226499194637030759214221405433730067252975356487293571655947465562336968378931694193445519305068993

解出的原始明文数字 m 为:
9810209026724424616698728675395036057388193011482243197
【第二步:最终 Flag 翻译】
🎉 成功!最终 Flag 文字为:flag{W31c0m3_T0_Crypt0}
【原题目代码】from Crypto.Util.number import *
## 【原题目代码】from Crypto.Util.number import *
```
from secrets import randbits

p = getPrime(512)
Expand All @@ -31,7 +34,9 @@ q = 1127452248211464816765342570765711794216721596961232424905785849339809281666
e = 65537
c = 10221721591889545844573050254595795861182348856506145605480348246534477032085113801390383245391427274224627900490105787486227774188957450006691363974396952878850785124275814042623413354128640305152567667226654321244510669777870256213487113315863197287562256336752636572876416053482569293397021584043886350655
'''
【解题脚本】
```
## 【解题脚本】
```
# -*- coding: utf-8 -*-
from Crypto.Util.number import long_to_bytes

Expand Down Expand Up @@ -75,17 +80,17 @@ except Exception:
print(f"🚩 拿到原始 Flag 字节流:{long_to_bytes(m)}")

print("="*50 + "\n")

【解题思路】
```
## 【解题思路】
根据正常逻辑:我们知道p,q,可以算出来n是多少,也可以算出来φ(n),然后根据c=pow(m,e,n),知道了e,φ(n)就能算出来e×d÷φ(n)=1算出来d是多少,知道了d和c的大小,就能根据解密公式算出m的值=c的d次方对n取模,

作业二:
【结果】
# 作业二:
## 【结果】
解出的原始明文 m 为:
584734024210241000157106698028514857242399424381
--------------------------------------------------
🎉 最终 Flag 为:flag{Wh@t_1s_dp_dq?}
【原题目代码】
## 【原题目代码】
```
from Crypto.Util.number import *

p = getPrime(512)
Expand Down Expand Up @@ -115,7 +120,9 @@ dp = 401068114021755738042293506599263878596085628429041672039168334777926739285
dq = 2650091114188243387783699150080671432452650354401886796343461099352350290584408461982954461814393687345324352950407449243857759926179828428073409383707519
c = 49442655923625309909385017545371837339079019962533687954830521594031788193892512818961352203881969632046490177930759665200677302956816647378151364853230118743634390053041583940566732297636464662866406886764229490729837423276227228984024967061624432225315562131278455141688731687433597958272776740673914705069
'''
【解题校本】
```
## 【解题校本】
```
from Crypto.Util.number import long_to_bytes

# [1. 录入已知参数]
Expand Down Expand Up @@ -145,14 +152,16 @@ try:
except:
print(f"🚩 原始字节流为:{long_to_bytes(m)}")
print("="*50)
【解题思路】
```
## 【解题思路】
由于题目中没有给出具体的e的值,但是给出了dp,dq的值,我们可以根据这两个值绕过e直接求,m的值
作业三:
【结果】
# 作业三:
## 【结果】
🎉 成功检测到 $m^3 < n$ 漏洞!正在还原明文...
解出的数字 m 为:56006392793428920827102007075673367741253452217733739675258514641466151117335380278006308102255031165
最终 Flag 为:flag{d07cc7cf-9d78-4bfb-9449-d099b0329563}
【原题目代码】
## 【原题目代码】
```
import libnum
import gmpy2
import uuid
Expand All @@ -177,7 +186,9 @@ n= 14292719350731304209906438502366895952915964006388078677132756297121071761855
e= 3
c= 175676150266632261170048224865383344382701466592480820852821987310883907646453945269873798553604154950679789706816103734968119191264040967221804258086782193045472222806462922151478555259607753533988574525462498108797766467552606740700525351657072574897006690469089852849417334378963664086027896356417125
'''
【解题脚本】
```
## 【解题脚本】
```
import gmpy2
import libnum

Expand All @@ -204,9 +215,11 @@ else:
print("❌ 警告:无法完全开尽立方根。")
print("这可能意味着 $m^3$ 稍微超过了 $n$,需要尝试 c + n 后再开方。")
print("-" * 50)
【解题思路】
```
## 【解题思路】
由于n是1008位2进制长度,而m的三次方大约是900多位二进制数,所以这样的话c就等于m的三次方,所以求m就直接把c开三次方就好

作业四:为什么选crypto
#作业四:为什么选crypto
大二上的时候学了公钥密码学的数学基础,那时候有些贪玩,课本都没怎么看过,到最后考试的时候,很多证明题,解答题什么的都是现场推演的,感觉最后结果还不错,也比较享受数学推导的过程,

我想莫非我有这方面的天赋,就选了这个方向。