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
86 changes: 82 additions & 4 deletions Cry/submissions/Cry/submissions/25-Cry-shuiyue-杨晶.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,95 @@
>(开始的时候想直接在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="96" height="128" alt="005d906623b8b3fa8efed11e72aef631_720" src="https://github.com/user-attachments/assets/ec2431ff-5eac-4bec-a0f1-af0a9f27e6c2"/>
>>![笔记2]<img width="96" height="128" alt="3b381265ec7524ac9b3fa4c2e52d487e_720" src="https://github.com/user-attachments/assets/14d45050-dc57-48f5-ae3f-e659c0c0049f"/>
>>![笔记3]<img width="96" height="128" alt="73f2174de882794114424646e9e96678_720" src="https://github.com/user-attachments/assets/50ef4606-cd8c-4eb2-b324-3be38a12a3b2"/>

##题目一: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=1022172159188954584457305025459579586118234885650614560548034824653447703208511380139038324539142727422462790049010578748622777418895745000669136397439695287885078
'''
```



解答:<img width="667" height="356" alt="d9fe777716c9b49a3ba4ed4f22e505aa" src="https://github.com/user-attachments/assets/f57d9715-9273-425a-8099-b81cf1ae9896" />
解题思路:
1.知识了解:Crypto.Util.number 是 PyCryptodome 库中的一个工具模块,专门处理大整数的密码学运算
2.题目给出了n分出的两个素数p,q,给出了私钥e,密文c,明文m。
3.在题目中发现m是 flag 转化成的数字,那么要得到flag,就要先把m 转化成字节串,再转化成字符串,于是
先'long_to_bites',然后再decode,就得到了flag。


题目二: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/c54b713e-495d-434b-8d34-bd27bcb22e6f" />
题目分析:
1.题目相较于第一题,给出了dp,dq,dp与dq是p,q减1后去模的结果,可以减少计算。
2.通过dp,dq先解出密钥的一部分,然后利用中国剩余定理解得 m。
3.将m 转换为字符型,得到flag。


##为什么要选择这个方向:
>实践出真知
Expand Down