- 博客(51)
- 收藏
- 关注
原创 扩展中国剩余定理脚本(恢复私钥d)
正好构成一个同余方程组,但是我们发现模数之间都有公共因子,不满足标准中国剩余定理,当模数不互质时就可以考虑扩展中国剩余定理,直接套脚本。恢复d之后,我们就可以直接求m了,m=pow(c,d,n).本题就是更具扩展中国剩余定理来恢复私钥d.题目中。
2025-08-29 13:54:34
64
原创 [HGAME 2022 week1]Easy RSA
我们观察输出的结果(12433, 149, 197, 104)就是每个字符返回的一个元组。对每一个组进行rsa解密拼接即可。先分析题目函数encrypt给出了e,p,q,和密文c(即ord(c)^e mod (p*q)),然后。字符串的每个字符上。然后将map对象转换为列表。
2025-08-28 00:42:53
110
原创 buuctf_crypto70-74
题目给了两个文件,一个flag.enc,一个public.key,给了公钥文件和密文文件,对于public.key,我们可以读取n,e,大数n得到就可以尝试分解得到p和q,再去观察flag.enc,大概率是base64编码了,得到密文c之后,后面就用。他是256字节,而模数n也是2048位=256字节,但是在RSA加密中,明文的长度必须小于模数n的长度,这就意味着加密时使用了完整的2048位RSA加密,长度正好达到256字节,所以直接使用pow(c,d,n)会报错--我是这么认为的。
2025-08-22 14:21:30
733
原创 [NSSCTF 2022 Spring Recruit]rrrsssaaa
后面就是求r和q了,r要么直接r = sympy.nextprime(p * 5)根据题目意思来求,要么还是利用低指数加密脚本,r^3明显是小于n的,那么根据小明文攻击,直接套脚本了。那么由p3=pow(p,3,n),p^3明显是小于n的,那么根据小明文攻击, p=(p3)^3。追求效率肯定就直接根据题目求p,q,r了,后面步骤一致。本题主要还是考察低指数加密攻击算法。我们观察p,q,r的取值。从当前值开始递增,直到。剩下的自然就迎刃而解了。
2025-08-18 21:24:29
252
原创 [HGAME 2022 week2]RSA Attack2
不就说明把flag拆成三份并转换为数字了吗,如果看不懂也能结合。接下来就是对这三个小flag依次求解喽,最后再拼接在一起。以上分别对应task1,task2,task3三个脚本。对于task2,e这么小,立马想到低指数加密攻击。对于task3,同一n,不同e.立马想到共模攻击。print("# task3")也能想到。对于task1,由于。观察题目一开始就说明。
2025-08-17 16:56:50
231
原创 buuctf_crypto65-69
这里我们就可以想到ascll码拼接了,102,108,097,103,对照ascll码表不就对应f,l,a,g吗?这题没得说,给了一大串单词组成的字符串,根据题目提示的数字,估计是字频,原始的做法就是复制粘贴到word里面,查到之后给这些单词按词频从小到大一排,选第4,8,11,15,16个就行,然后组成一块构成flag即可。这个题目,都给了p,q,e,c了还能说啥,只不过是十六进制,转成十进制直接解就行了。题目给了两组公钥,相同n,不同e,让我们联想到共模攻击。,不是标准的字节流,所以直接。
2025-08-16 16:26:30
663
原创 [HDCTF 2023]Normal_Rsa(revenge)
这两个条件足够得出p和q了,那么r = n // (p * q),求出他们的欧拉函数phi=(p-1)*(q-1)*(r-1)由p=getPrime(256),p是256位,p^2是512位,n则更大,所以k只能取唯一值0。(我建议这种推导类的最好验证一下防止出错)意思就是 p² - P是 n的倍数。对于p² - P = k * n,即 q² - Q也是 n的倍数。
2025-08-15 19:04:20
133
原创 [RoarCTF 2019]RSA
得到p和q后,题目没有给e,一般RSA题目e都比较小,我直接爆破了,成功就得到出flag,失败就让他提示报错就行。这个A挺复杂的,先不管,既然给了N,我们直接分解,yafu工具肯定不管用,我直接用factordb((发现e是65537,其实我们想图快的话,直接猜65537都可以)
2025-08-15 18:00:08
188
原创 [HUBUCTF 2022 新生赛]RSAaaa
题目给了公钥(n,e),和一大串密文,这个密文由一大串大数字组成,猜测是每个整数代表一个加密符号共同组成了flag,那么看到大数n直接yafu工具试着分解。得到p和q,接下来按步骤求私钥d,对于密文c一个一个解密拼接即可。本题就考察基本的脚本编写了,难度不大。
2025-08-15 17:20:40
229
原创 [GWCTF 2019]BabyRSA1
(我一开始一直用大写N一直报错,才知道from sympy import N也是一个函数哈哈哈)我们大致看一下代码,一开始就把flag一刀两段了,那么我们就分开求再加起来喽。直接使用yafu工具分解(大家可以去下载),或者对N开开方去求。看到这个直接解方程,应该能解出F1和F2。最后直接F1和F2一加就得到flag。至于c1和c2,题目中。
2025-08-13 17:08:15
174
原创 [NPUCTF2020]这是什么觅
估计又是存在一个映射关系,F代表周五FRI对应的数字3,W代表周三WED对应的数字8,以此类推,SRT和SUN应该一个s1一个是s2,尝试一下密码还是不对,我们再尝试按字母表顺寻,转成字符串:calendar,正好是日历的意思。上面是日期,下面是F1 W1 S22 S21 T12 S11 W1 S13。50 4B 03 04开头则 100% 是 ZIP 文件。则翻译一下就是3 1 12 5 14 4 1 18。(其实我不清楚为啥在1上画个叉也被误导惹)改一下后缀之后解压得到一张图片。
2025-08-12 17:20:37
181
原创 buuctf_crypto一张谍报
运行结果就是:今朝梆子二更头,老鹰蹲猎东口,三更鼹鼠断东口亮子,老鹰进北口上树,三枝遇孙子,孙子对虎符曰:南天菩萨放鹰捉猴头。鹰对:北朝罗汉伏虎乱天门。合符放行,卡符扯呼。人离烧树,鼹鼠归洞,孙子找爷爷。这题很有意思,flag是老王说得话,仔细观察我们发现有两段很相似,再看第三段的“喵”和第二段“喵”对应,那么我们可以大胆猜想第一段和第二段存在映射关系,利用这段关系我们再去翻译第三段。然后题目是指暗号不就是“南天菩萨放鹰捉猴头”中的位置,我们先去找,知道之后再查对应。的相同位置的字符。
2025-08-12 16:45:38
173
原创 buuctf_crypto56-60
我们观察题目,确实一个vigenere密码,只不过偏移量多了一个1,题目给的密文很长而且我们还不知道(密钥)key,不如直接爆破。我们拿到题目后发现需要输入密码才能解压,hint.txt提示我们压缩包伪加密了,我们使用winHex去修改它的文件结构。,还是九键,第一行一个6代表“MNO”的M,第二行三个6代表“MNO”的O,以此类推,直接手写出来懒得敲代码了。本题提示曼联,应该是曼彻斯特编码,下面我就直接参考大佬的脚本了。知道了output所对应的是p,q,c,直接正常解。本题还是比较简单的,给出了。
2025-08-11 17:58:13
821
原创 buuctf_crypto51-55
给了奇怪的一串字符,题目是keyboard,说明和键盘有关,我们平时用的最多的就是九键或者二十六健,我们发现上面出现的字符都是26键上第一行的(除了p和q),总共8个,再联系九键,进行猜想,比方o,排在第一行的(除了p和q)的第8个,再结合出现3个连在一起,应该指的是数字8对应得九键的“WXYZ”的第三个“Y”,按照这样就行翻译直接得到youaresosmartthatthisisjustapieceofcake。看题目,同一明文,同m,不同e,明显是共模攻击。(如 e=3(通常 e≤20))和 。
2025-08-10 16:58:04
680
原创 [CISCN 2021初赛]rsa
最后我们再看print p3>>200,泄露 p3 的高 312 位,属于p的高位泄露攻击。第二部分,我们再看e2和e3,都是同一m,不同e,那么我们立刻联想到共模攻击。后面的部分都是给他们分别RSA加密,那么我们就开始一个一个求解。第一个e1等于3,很可能是低指数加密攻击,(我之前的文章也讲过。得到完整的p后后面只需要正常的RSA求解即可,脚本如下。将text分割成三段msg1,msg2,msg3。参照大佬的脚本,使用Coppersmith 方法。最后将三部分明文进行md5加密,脚本如下。
2025-08-09 17:51:39
650
原创 [CISCN 2022 西南]rsa
lcm = gmpy2.lcm(P-1, Q-1),也就是最小公倍数,我们记作λ(n)我们先看题目,题目给了很多信息,我们先不管上面的,直接来看lcm;的约数,且满足 RSA 的数学要求,那么我们就可以用来求私钥d。λ(n)求d更小,解密更快)则λ(n) 是欧拉函数。(其实我们大多数都用。
2025-08-07 17:22:03
158
原创 [BJDCTF 2020]EasyRSA
arctan(p)就是p的反正切函数,Derivative是要求导,我们在回顾其导数是。arth我查了一下,应该是指反双曲正切函数(artanh),求导之后是。,n=pq,两个方程联立即可求出p,q,剩下的自然迎刃而解了。本题给了c,n,z,我们肯定要从z入手;两个一减化简之后等于。
2025-08-07 15:42:15
301
原创 buuctf_crypto46-50
观察题目,给了一大串数字,那么我们猜测可能要转acsll码,然后题目又是rot,那么常见的就那么几种,rot13,rot47,rot5,我们直接尝试rot13,直接来写脚本。题目给了一个p,q,c是给了倒序的base64(可能有人会认为是base32,其实是base64这是一个易错点)题目给了p和q的生成是从前10000的质数中任意选取任意数额的指数相乘再加一,我们从这里出发进行推导。题目给的代码给了e,n,c,我们一开始去尝试使用yafu工具分解n,不行,那我们尝试其他路径。互质,且快速幂算法效率高。
2025-08-06 18:00:34
412
原创 buuctf_crypto41-45
很多人拿到之后可能会懵,其实这涉及一个斐波那契数列,然后打乱,那么题目还给了神秘数字串:36968853882116725547342176952286,我们猜测是将神秘数字按斐波那契数列的顺序重新排列,直接写脚本。题目提示古典密码,我们观察图片有三种颜色分辨,应该是有三种不同的古典密码,其中最明显的肯定是猪圈密码,另外两个通过查阅资料,分别是圣堂武士密码和标准银河字母加密。我们观察题目给了很多组n和c,e=65537比较小,我们可以借此线索联想到低指数广播攻击,我们遍历所有。的组合,计算它们的 。
2025-08-05 19:17:03
919
原创 buuctf_crypto36-40
我们对‘p+q’和‘(p-1)*(q-1)’是不是很熟悉,(p-1)*(q-1)=pq-(p+q)+1=n-p-q+1,这样我们直接求出n了,根据m=pow(enc_flag,d,n),直接求出m。观察乐谱,"这里没有八",说明极有可能是八进制来表示acsll码,那么我们直接随波逐流一把梭。实话说这题还是比较难想到的,属于Playfair密码,有兴趣可以去参考。题目就给了n和e,那么我们直接使用在线工具。去分解n,得到p和q,之后求出d。1.密文长度通常为偶数。2.字母频率更均匀。
2025-07-31 16:57:23
740
原创 30.[BJDCTF 2020]rsa
显然第一组和第二组公用模数(q)复用,让我们想到模不互素攻击,利用题目中两次生成模数时复用了相同的。接下来就剩下e了,也就是第三组我们要得到的信息,我们发现题目中限制。结合题目,出现三次pow,也就是三组加密数据,第一组密文。pow(294,e,n)我们也知道,那么我们直接暴力破解e。之后的步骤也就是水到渠成了,求出私钥d,解flag,欧克!pow(294,e,n)(我们暂时记作output)。
2025-07-30 23:31:17
231
原创 buuctf_crypto31-35
m = bytes_to_long(flag.encode()) # 字符串 → 字节 → 整数。打开题目文件一看e为3,这时候我们应该考虑低指数加密了,不懂得可以去参考我之前的文章。flag = "⚠️ 未找到 flag{...},请检查解密结果!在int(),强制转化为整数,这种代码风格应该属于python2,我们应该为。print(f"公钥指数 (e): {key.e}")print(f"模数 (n): {key.n}")得到n和e,然后我们模数分解,使用。知道p,q,e,n,直接使用。
2025-07-30 17:02:59
671
原创 buuctf_crypto26-30
显然题目一看就是一个摩斯密码,我们先解码,得到:61666374667B317327745F73305F333435797D,验证一下不是flag,我们猜测可能是base编码或者md5,但是一看不符合base32,base64,md5等等,但是却符合base16的所有要求,我们base16解码(也就是16进制转ascll编码(hex解码)),题目文件给了两个,一个key,一个密文,我们看题目提示异性相吸,我们可以想象到二进制之间的异或,那么我们先将两个文件全部转为二进制。e,c不同,且e1和e2互质。
2025-07-29 15:37:33
581
原创 buuctf_crypto21-25
我们一一对应找到他们的数字组合起来是88 90 83 68 77 70 76 90。进行暴力破解,题目提示找到key,那么我们直接以PIO=key为线索进行暴力破解。这是题目,题目提示答案是32位,我们发现后面数字正好32位,猜测为答案。题目明确提示了Unencode编码,直接使用在线工具。结合题目又是古典密码,猜测是栅栏密码或者凯撒密码。猜测是ascll编码,解码就是XZSDMFLZ。发现2,4栏数有意义,再分别使用凯撒解密验证。题目中都是一些天干地支组成,我们参考。接下来我们直接使用工具。
2025-07-28 16:46:40
1037
原创 buuctf_crypto-RSA1(由p,q,dp,dq,c求m)
题目给出了dp,dq值得我们注意,在 RSA-CRT 中:dp ≡ d mod (p−1),dq ≡ d mod (q−1),之后我们就可以开始推导了。m=((m2-m1)*p^(-1) mod q)*p+ m1 mod n这就是最终结论。两边同时乘以p^(-1) => k=(m2-m1) *p^(-1) mod q。由费马小定理c^(p-1)=1 mod p,得:m1=c^dp mod p。由dp ≡ d mod (p−1),得出d=(p-1)*k+dp。计算 m1 ≡ c^d mod p。
2025-07-28 15:34:24
799
原创 RSA_NC不互素
题目给的M = m * e * 1 * 2022 * p值得我们注意,说明p是M的因子,那么我们可以从这里入手。assert p * q == n # 验证分解正确性。又因为M = m * e * 1 * 2022 * p。# 解密得到M = m * e * 2022 * p。# 分解n(通过gcd(c, n)直接得到p)利用这个结论求出p,之后的问题就迎刃而解了。# 将m转为字节(flag)假设c=(m*p)^e%n。
2025-07-27 19:16:52
570
原创 RSA_m大于n
flag = libnum.n2s(int(m)) # 将整数m转换为字节串(如ASCII或UTF-8)p1, s = gmpy2.iroot(n, 2) # 计算n的平方根,p1是整数部分,s表示是否完全平方。的一个候选值,即m1=m%n,真实明文可能是m = m1 + k*n (k 是未知整数)m = m1 + k * n # 计算候选明文m = m1 + k*n。然后我们验证一下是否m = m1 + k*n,再看看k一般多大。q = n // p # 计算q = n // p。
2025-07-27 16:06:52
967
原创 buuctf_crypto16-20
我们观察密文MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOW不按照字母顺序的加密MEHZO},和flag的3形式很相似,但是一般的凯撒解密无法将MTHJ转为flag,所以我们猜测不是按顺序进行凯撒加密得到的密文,我们使用。结合文件名称pass.hash以及内容,应该是考察md5,内容格式是 Windows SAM 数据库 ,格式为用户名:用户RID:LM哈希:NTLM哈希:::(其他字段),然后我们一个一个去尝试MD5解密。
2025-07-27 13:57:35
226
原创 RSA之m^p%n与m^q%n
p = libnum.gcd(pow(x, n, n) - y, n) # 计算x^n mod n,然后减去y,最后与n求gcd。# - 所以x^n - y ≡ m^n - m ≡ 0 mod p (因为m^n ≡ m mod p)=> x^q=(m^q%n)^p%n。# φ(n) = (p-1)*(q-1),这是RSA中的欧拉函数。=>x^n=(y^p)^p+kn,存在整数k使得等式成立。两边同时模p,x^n%p=(y^p)^p%p+kpq%p。两边同时平方个p得:(x^q)^p=(y^p)^p%n。
2025-07-26 18:14:36
681
原创 buuctf_crypto11-15
在26中结果中我们发现偏移量为13的单词是SECURITY有用的单词,推测偏移量为13。s = list("ComeChina") # 转换为列表以便修改单个字符。s = list("FRPHEVGL") # 转换为列表以便修改单个字符。仅在Python2中合法,在 Python 3 中,应该修改为。然后小的在前,大的在后,组成101999966233,再md5解密。题目简介详细给出了提示,我们可以使用yafu工具去分解大素数。# 处理超出'Z'的情况。# 处理超出'z'的情况。是一个普通的字符串(
2025-07-26 16:20:00
844
原创 rsa_(n+p)%(p-1)
经过推理我们得出leak=2*(p-q+1),再与n=pq联立,解出p,q,从而求出m。# 计算私钥指数d,即e的模逆元(满足 e*d ≡ 1 mod phi)本题给出的leak=(n+p)%(q-1),从这里入手进行推导。p = int(x[1][0]) # 将解中的p转换为整数。q = int(x[1][1]) # 将解中的q转换为整数。# 注意:这里假设解x是一个包含两个解的列表,舍去负解。# 计算欧拉函数值,phi = (p-1)*(q-1)# 定义符号变量p和q,表示RSA的两个素数因子。
2025-07-26 00:03:27
584
原创 rsa_dp泄露
本题给出e = libnum.generate_prime(128),e比较大,所以无法爆破。=》d*e=k*phi+1(存在整数k满足条件,phi指φ(n))因为:任意数a都有,a^(dp*e)%p=a。即p=gcd(2^(dp*e)%n-2,n)=》任意数a都有,a^(dp*e)%p=a。由2^(dp*e)-kpq=x两边模p。由欧拉定理:a^(p-1)%p=1。那么再假设2^(dp*e)%n=x。因为:设2^(dp*e)%n=x。得出结论后我们就可以写脚本了。所以:2^dp*e%p=2。
2025-07-25 17:24:01
693
原创 buuctf_crypto6-10
这个题目给了姓名和生日,然后key里面有十个x猜测是zs19900315(有些题目真是要会猜哈哈)题目直接提示是Quoted-printable编码,直接使用在线工具。# 将字符转换为对应的ASCII值,并增加偏移量k。# 然后将得到的ASCII值转换回字符并打印出来。题目直接提示了变异凯撒,我们直接选择随波逐流一把梭。题目直接提示rabbit编码,直接使用在线工具。根据题目联想到栅栏密码,直接用随波逐流一把梭。# 处理下一个字符时,偏移量增加1。flag{那你也很棒哦}
2025-07-25 14:30:35
303
原创 RSA之leak=p^q%n+q^p%n
sqrt_disc = gmpy2.isqrt(discriminant) # 整数平方根。assert p * q == n, "分解 n 失败,请检查 leak 值!d = gmpy2.invert(e, phi) # 模逆元。# 方程: x^2 - leak*x + n = 0。print("解密结果:", plaintext)# 1. 解二次方程求 p 和 q。# 验证 p 和 q 是否正确。# 2. 计算私钥 d。
2025-07-24 17:54:07
478
原创 buuctf_crypto1-5
题目synt{5pq1004q-86n5-46q8-o720-oro5on0417r1},看着像flag格式,我们考虑移位密码,base64特征:大小写字母(a-Z)和数字(0-9)以及特殊字符('+','/')不满3的倍数用“=”补齐。直接随波逐流一把梭发现时rot13(将字母表中的每个字母替换为它后面的第13个字母),直接解出。题目直接给出提示摩斯密码,直接随波逐流一把梭或者在线工具。本题明确提示考察url编码,直接在线工具。本题直接提示md5算法,直接在线工具。我们直接随波逐流一把梭,得出。
2025-07-24 16:01:37
221
原创 低指数加密攻击(低指数广播攻击)
低指数加密攻击是RSA密码系统中的一种经典攻击方式,加密指数就是e(一般为65537),在CTF题中,一般e=3且明文m较短时破解。2.如果e=3,且m^e>n,那么设k,有:c=m^e+k*n,爆破k,如果c−kn能开三次根式,得到m。p = libnum.generate_prime(1024) # 重新生成p。1.若 e=3 且 m^3<n,则 c=m^3,直接计算立方根得到m。# 由于e=3且m^3 < n,实际上c = m^3(没有模运算)# 计算欧拉函数φ(n) = (p-1)*(q-1)
2025-07-23 16:25:52
731
原创 wiener(维纳)攻击脚本
维纳攻击适用于RSA中私钥d较小(通常满足d < N^(1/4))且公钥e较大的场景。脚本通过连分数展开逼近k/d,从而恢复私钥d并解密密文。
2025-07-22 16:35:34
889
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人