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
57 changes: 56 additions & 1 deletion Cry/submissions/Cry/submissions/25-Cry-shuiyue-杨晶.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,62 @@ c = 4944265592362530990938501754537183733907901996253368795483052159403178819389
2.知识补充(自我提醒):
>题目中的dp,dq是由p,q分别减一再取模得到,可以简化计算。
3.由于dp,dq可看作密钥的一部分,故而先'pow'算出dp,dq。
4.利用中国剩余定理得到m,再将m转化为字符型,得到flag。
4.利用中国剩余定理得到m,再将m转化为字符型,得到flag。
## 第三题 three

```py
import libnum
import gmpy2
import uuid
flag = "flag{" + str(uuid.uuid4()) + "}"
m = libnum.s2n(flag)
print(gmpy2.bit_length(m ** 3))
while True:
p = libnum.generate_prime(504)
q = libnum.generate_prime(504)
n = p * q
phi_n = (p - 1) * (q - 1)
e = 3
if gmpy2.gcd(e, phi_n) == 1 and phi_n%e !=0:
break

c = pow(m, e, n)
print("n=", n)
print("e=", e)
print("c=", c)
'''
n= 1429271935073130420990643850236689595291596400638807867713275629712107176185520444788761901754075622136449476721042807647099083589759664014467696405646188198112649666177678289522724798981531832903351705482763333352669597586657968404428319154104297454666647063679624028208478294081894177792365782518110223
e= 3
c= 175676150266632261170048224865383344382701466592480820852821987310883907646453945269873798553604154950679789706816103734968119191264040967221804258086782193045472222806462922151478555259607753533988574525462498108797766467552606740700525351657072574897006690469089852849417334378963664086027896356417125
'''
```

思路思路:
1.题目里 e=3,c = m³ mod n
2.因为明文 m 是 flag+uuid,长度很短,m³ 直接小于模数 n,没有发生取模运算
3.所以:c = m³,直接对 c 开三次方就能得到 m
4.再把数字 m 转回字符串就是 flag

```py
from Crypto.Util.number import *
import gmpy2
n= 1429271935073130420990643850236689595291596400638807867713275629712107176185520444788761901754075622136449476721042807647099083589759664014467696405646188198112649666177678289522724798981531832903351705482763333352669597586657968404428319154104297454666647063679624028208478294081894177792365782518110223
e= 3
c= 175676150266632261170048224865383344382701466592480820852821987310883907646453945269873798553604154950679789706816103734968119191264040967221804258086782193045472222806462922151478555259607753533988574525462498108797766467552606740700525351657072574897006690469089852849417334378963664086027896356417125
h = pow(2, 1005)
if (h < n):
print("YES")
m = int(gmpy2.iroot(c, 3)[0])
flag = libnum.n2s(m)
print(flag)
```

最后输出:

```txt
YES
b'flag{d07cc7cf-9d78-4bfb-9449-d099b0329563}'
```
##为什么要选择这个方向:
>实践出真知

Expand Down