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
88 changes: 84 additions & 4 deletions Cry/submissions/Cry/submissions/25-Cry-shuiyue-杨晶.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,98 @@
>(开始的时候想直接在windows系统上进行配置,但是我的电脑无法开启虚拟机平台
>>(开启进度(各种方式)永远卡在5.9%/14.6%/37.8%/56.2,直到失败)
>最后在别人的帮助下才装Arch liunx,然后再配置下载,直到这个星期六中午才配好。
![结果如图](<img width="563" height="132" alt="4a029d11a14419121523e1df51db36bb" src="https://github.com/user-attachments/assets/9beff7a4-1876-4c9a-a9a5-b9fb64cf97e3"/>)
![结果如图]<img width="563" height="132" alt="4a029d11a14419121523e1df51db36bb" src="https://github.com/user-attachments/assets/9beff7a4-1876-4c9a-a9a5-b9fb64cf97e3"/>
##RSA算法学习
1.RSA是一种非对称加密算法,依靠大素数分解困难,费马小定理与二次探测原理(即米勒拉宾素性测试)为基础。
2.先生成两位512位的素数*p,q*,然后通过**欧拉函数**计算出其小于其乘积N的素数的个数&phi(N)。
3.选取公钥e介于1 和 步骤二计算出的欧拉函数值之间,且gcd(e,&phi) = 1。
4.算私钥*d*满足e*d = 1(mod&phi(N))。
>>
>>进度过慢,我加几张笔记吧(假期里的老本)
>>![笔记1](<img width="960" height="1280" alt="005d906623b8b3fa8efed11e72aef631_720" src="https://github.com/user-attachments/assets/ec2431ff-5eac-4bec-a0f1-af0a9f27e6c2"/>)
>>![笔记2](<img width="960" height="1280" alt="3b381265ec7524ac9b3fa4c2e52d487e_720" src="https://github.com/user-attachments/assets/14d45050-dc57-48f5-ae3f-e659c0c0049f"/>)
>>![笔记3](<img width="960" height="1280" alt="73f2174de882794114424646e9e96678_720" src="https://github.com/user-attachments/assets/50ef4606-cd8c-4eb2-b324-3be38a12a3b2"/>)
>>![笔记1]<img width="960" height="1280" alt="005d906623b8b3fa8efed11e72aef631_720" src="https://github.com/user-attachments/assets/ec2431ff-5eac-4bec-a0f1-af0a9f27e6c2"/>
>>![笔记2]<img width="960" height="1280" alt="3b381265ec7524ac9b3fa4c2e52d487e_720" src="https://github.com/user-attachments/assets/14d45050-dc57-48f5-ae3f-e659c0c0049f"/>
>>![笔记3]<img width="960" height="1280" alt="73f2174de882794114424646e9e96678_720" src="https://github.com/user-attachments/assets/50ef4606-cd8c-4eb2-b324-3be38a12a3b2"/>

##题目一
1. eeeeez_rsa

```Python
from Crypto.Util.number import *
from secrets import randbits

p = getPrime(512)
q = getPrime(512)

n = p * q
e = 65537

m = bytes_to_long(flag)

c = pow(m, e, n)

print("p =", p)
print("q =", q)
print("e =", e)
print("c =", c)
'''
p = 7833526559350210716763736624276871338973265302039384005037668270722459749111510212645578582715412039060908556429504391788904499303021963918033838457712021
q = 11274522482114648167653425707657117942167215969612324249057858493398092816663094339833695146914712716091767834292452373966791325922322967827879446489910963
e = 65537
c = 10221721591889545844573050254595795861182348856506145605480348246534477032085113801390383245391427274224627900490105787486227774188957450006691363974396952878850785124275814042623413354128640305152567667226654321244510669777870256213487113315863197287562256336752636572876416053482569293397021584043886350655
'''
```
###题目解答
<img width="667" height="356" alt="d9fe777716c9b49a3ba4ed4f22e505aa" src="https://github.com/user-attachments/assets/8835b832-146e-4da2-8566-847833e1becf" />

###题目分析
1.Crypto.Util.number 是 PyCryptodome 库中的一个工具模块,专门处理大整数的密码学运算。
2.发现题目中 m 是明文的数字形式,于是想先得到m。
3.通过'pow'得到m,再通过'long_to_bytes'转化m 得到字节型,再'decode'得到flag。

##题目二
2. What is dpdq

```Python
from Crypto.Util.number import *

p = getPrime(512)
q = getPrime(512)

n = p * q

m = bytes_to_long(flag)

c = pow(m, e, n)

phi = (p - 1) * (q - 1)
d = inverse(e, phi)

dp = d % (p - 1)
dq = d % (q - 1)

print("p =", p)
print("q =", q)
print("dp =", dp)
print("dq =", dq)
print("c =", c)
'''
p = 7815414185491141116816659592648655093824828684096724566017773298150863675227130435782645950134326106977982747903113904523205447790009729530724322503221833
q = 9989016009119164140172559452397593815416653032520645020530362343604703571290641132626496035194681031089349635895258123948622879868985300264027551088746747
dp = 4010681140217557380422935065992638785960856284290416720391683347779267392850433355451759290094414691393922757792964689212573746434435619933431808206484225
dq = 2650091114188243387783699150080671432452650354401886796343461099352350290584408461982954461814393687345324352950407449243857759926179828428073409383707519
c = 49442655923625309909385017545371837339079019962533687954830521594031788193892512818961352203881969632046490177930759665200677302956816647378151364853230118743634390053041583940566732297636464662866406886764229490729837423276227228984024967061624432225315562131278455141688731687433597958272776740673914705069
'''
```

###题目解答
<img width="1374" height="288" alt="35789eaca7549618262df95ecf639364" src="https://github.com/user-attachments/assets/f98abe7e-8035-4c97-836d-2117bbe617a2" />

###题目解析
1.相比第一题,这个题目引入了dp.dq,简化了运行时的运算。
2.知识补充(自我提醒):
>题目中的dp,dq是由p,q分别减一再取模得到,可以简化计算。
3.由于dp,dq可看作密钥的一部分,故而先'pow'算出dp,dq。
4.利用中国剩余定理得到m,再将m转化为字符型,得到flag。
##为什么要选择这个方向:
>实践出真知

Expand Down