From 139cb21718ba6c966e54b4ff22c55e8d5dc79ca8 Mon Sep 17 00:00:00 2001 From: mwatson-aprilu Date: Wed, 22 Apr 2026 23:29:00 +0800 Subject: [PATCH] =?UTF-8?q?Create=2025-Cry-shuiyue-=E6=9D=A8=E6=99=B6.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit partially complete the question。 --- ...5-Cry-shuiyue-\346\235\250\346\231\266.md" | 86 ++++++++++++++++++- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git "a/Cry/submissions/Cry/submissions/25-Cry-shuiyue-\346\235\250\346\231\266.md" "b/Cry/submissions/Cry/submissions/25-Cry-shuiyue-\346\235\250\346\231\266.md" index bd4cf42..6d0f49a 100644 --- "a/Cry/submissions/Cry/submissions/25-Cry-shuiyue-\346\235\250\346\231\266.md" +++ "b/Cry/submissions/Cry/submissions/25-Cry-shuiyue-\346\235\250\346\231\266.md" @@ -2,7 +2,7 @@ >(开始的时候想直接在windows系统上进行配置,但是我的电脑无法开启虚拟机平台 >>(开启进度(各种方式)永远卡在5.9%/14.6%/37.8%/56.2,直到失败) >最后在别人的帮助下才装Arch liunx,然后再配置下载,直到这个星期六中午才配好。 -![结果如图](4a029d11a14419121523e1df51db36bb) +![结果如图]4a029d11a14419121523e1df51db36bb ##RSA算法学习 1.RSA是一种非对称加密算法,依靠大素数分解困难,费马小定理与二次探测原理(即米勒拉宾素性测试)为基础。 2.先生成两位512位的素数*p,q*,然后通过**欧拉函数**计算出其小于其乘积N的素数的个数&phi(N)。 @@ -10,9 +10,87 @@ 4.算私钥*d*满足e*d = 1(mod&phi(N))。 >> >>进度过慢,我加几张笔记吧(假期里的老本) ->>![笔记1](005d906623b8b3fa8efed11e72aef631_720) ->>![笔记2](3b381265ec7524ac9b3fa4c2e52d487e_720) ->>![笔记3](73f2174de882794114424646e9e96678_720) +>>![笔记1]005d906623b8b3fa8efed11e72aef631_720 +>>![笔记2]3b381265ec7524ac9b3fa4c2e52d487e_720 +>>![笔记3]73f2174de882794114424646e9e96678_720 + +##题目一: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 +''' +``` + + + +解答:d9fe777716c9b49a3ba4ed4f22e505aa +解题思路: +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 +''' +``` +题目解答: 35789eaca7549618262df95ecf639364 +题目分析: +1.题目相较于第一题,给出了dp,dq,dp与dq是p,q减1后去模的结果,可以减少计算。 +2.通过dp,dq先解出密钥的一部分,然后利用中国剩余定理解得 m。 +3.将m 转换为字符型,得到flag。 + ##为什么要选择这个方向: >实践出真知