From 4d62712ab0367bf846324697011ee66bf6b171c5 Mon Sep 17 00:00:00 2001 From: mwatson-aprilu Date: Wed, 22 Apr 2026 23:50:55 +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 部分完善了作业,还差一题。 --- ...5-Cry-shuiyue-\346\235\250\346\231\266.md" | 88 ++++++++++++++++++- 1 file changed, 84 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..191bea2 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,10 +10,90 @@ 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 +##题目一 +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 +''' +``` +###题目解答 +d9fe777716c9b49a3ba4ed4f22e505aa + +###题目分析 +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 +''' +``` + +###题目解答 +35789eaca7549618262df95ecf639364 + +###题目解析 +1.相比第一题,这个题目引入了dp.dq,简化了运行时的运算。 +2.知识补充(自我提醒): +>题目中的dp,dq是由p,q分别减一再取模得到,可以简化计算。 +3.由于dp,dq可看作密钥的一部分,故而先'pow'算出dp,dq。 +4.利用中国剩余定理得到m,再将m转化为字符型,得到flag。 ##为什么要选择这个方向: >实践出真知