这是base??
题目
1 | dict:{0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U', 9: 'V', 10: 'z', 11: 'A', 12: 'B', 13: 'C', 14: 'D', 15: 'E', 16: 'F', 17: 'G', 18: 'H', 19: '7', 20: '8', 21: '9', 22: 'P', 23: 'Q', 24: 'I', 25: 'a', 26: 'b', 27: 'c', 28: 'd', 29: 'e', 30: 'f', 31: 'g', 32: 'h', 33: 'i', 34: 'j', 35: 'k', 36: 'l', 37: 'm', 38: 'W', 39: 'X', 40: 'Y', 41: 'Z', 42: '0', 43: '1', 44: '2', 45: '3', 46: '4', 47: '5', 48: '6', 49: 'R', 50: 'S', 51: 'T', 52: 'n', 53: 'o', 54: 'p', 55: 'q', 56: 'r', 57: 's', 58: 't', 59: 'u', 60: 'v', 61: 'w', 62: '+', 63: '/', 64: '='} |
分析
刚开始以为是python字典 然后把这个进行替换 让ai去解密 但是不行
然后提取出 字典所有值,放到CyberChef中 base64替换 解密即可 BJD{D0_Y0u_kNoW_Th1s_b4se_map}
1 | base64_dict = { |
[NSSCTF 2022 Spring Recruit]rrrsssaaa
题目
1 | from Crypto.Util.number import * |
分析
p = getPrime(1024)
r = p * 5 + i 判断r是否为素数,如果是素数 i清零 否则j++ 直到r为素数
q = p * 10 + i q也同理r
n = p * q * r e = 65537 c = pow(bytes_to_long(flag.encode()), e, n)
求m
p3 q3 r3 均为 X ^3 mod n 优先考虑低加密指数攻击
C 三 m^e mod n C = k*n + m^e , k∈Z
p3 = pow(p, 3, n) q3 = pow(q, 3, n) r3 = pow(r, 3, n)
c = pow(m,e,n)
然后低加密指数求出对应的 p q r
n = q * p * r
WP
1 | import gmpy2 |
用这个脚本 带入 q3 p3 r3 可以求出 p q ,r没求出来。
但是知道 p q n 也就可以求出r来
r 可根据原题中p去求出来
求出后就正常求phi d m 即可得到flag
1 | import gmpy2 |
[LitCTF 2023]P_Leak
题目
1 | from Crypto.Util.number import * |
分析
已知dp,n,c,e, dp泄露类
已知 e n c dp 倒推:求m -> 求d -> 求phi -> p q d = gmpy2.invert(e,phi_n) phi_n = (p-1)(q-1)
由 dp*e 三 e*d mod (p-1) -> e*d = k(p-1)+dp*e, k∈Z 由 e*d 三 1 mod (p-1)(q-1) -> e*d = Ω(p-1)(q-1)+1 ,Ω∈Z 根据两个e*等式 -》 k(p-1)+dp*e = Ω(p-1)(q-1)+1 , k∈Z,Ω∈Z 进而得到 dp * e = (p-1)* (Ω(q-1)-k ) + 1 也就说 dp*e = β(p-1) + 1 ,β∈Z ∵ dp < (p-1) ∴ e>β 即 1<β<e 所以存在一个β 满足 dp*e = β(p-1) + 1 所以遍历β 找到后可求出 p-1 进而求出 p q
可以直接套模板
WP
1 | from Crypto.Util.number import long_to_bytes |
[CISCN 2023 初赛]Sign_in_passwd
题目
1 | j2rXjx8yjd=YRZWyTIuwRdbyQdbqR3R9iZmsScutj2iqj3/tidj1jd=D |
第二行带%3D 先进行url解码 解码后65位 推测是base64置换表 直接上 CyberChef 对第一行解密
1 | GHI3KLMNJOPQRSTUb=cdefghijklmnopWXYZ/12+406789VaqrstuvwxyzABCDEF5 |

得到flag flag{8e4b2888-6148-4003-b725-3ff0d93a6ee4}
[GDOUCTF 2023]Absolute_Baby_Encrytpion
题目描述
1 | Alice用脚本向Bob发送了以下消息。 这是用JS写的。 Bob对JS一无所知。 你能帮忙看看留言吗? |
js脚本
1 | let messagetoEncrypt = prompt("Enter a string: ").toLowerCase(); |
根据js脚本 是一个字母符号置换表 py转成字典
1 |
|
[NISACTF 2022]normal 【套娃提 Ook!】
题目
1 | ..... ..... ..... ...!? !!.?. ..... ..... ..... ..?.? !.?.. ..... ..... |
分析
只要三种元素 !?. 比较符合Ook加密
套娃题 没啥意思 不想着了
[LitCTF 2023]yafu (中级)
题目
1 | from Crypto.Util.number import * |
分析
yafu分解n

WP
1 |
|
[LitCTF 2023]md5的破解
题目
1 | from Crypto.Util.number import * |
分析
缺少第13、14、18、34位 爆破大小写字母数字即可
WP
1 |
|
[HDCTF 2023]爬过小山去看云
题目
1 | 密文:ymyvzjtxswwktetpyvpfmvcdgywktetpyvpfuedfnzdjsiujvpwktetpyvnzdjpfkjssvacdgywktetpyvnzdjqtincduedfpfkjssne |
没见过 不会整 直接看下wp记录下
【希尔+云影】
希尔密码 hill cipher
替换密码,使用矩阵和矩阵乘法来混合明文
http://www.metools.info/code/hillcipher243.html 在线解密
得到 yourpiniseightfourtwozeroeightfourtwoonezeroeighteightfourzerotwofourzeroeightfourzeroonezeroonetwofourx
对应数字 eightfourtwozeroeightfourtwoonezeroeighteightfourzerotwofourzeroeightfourzeroonezeroonetwofour
842084210884024084010124 只包含01248云影密码
NOTFLAG
1 | # 云影密码加解密脚本 |
[LitCTF 2023]e的学问【e phi不互素】
题目描述:当e不是65537了,该怎么办呢?
1 | from Crypto.Util.number import * |
WP
1 | from Crypto.Util.number import long_to_bytes |
风二西工具也可直出m 然后longtobyte即可得到flag
### [湖湘杯 2021]signin - 忘做了后面做
题目
1 | from Crypto.Util.number import * |
[NSSCTF 2022 Spring Recruit]Vigenere
不知道key 利用在线网站爆破 https://www.guballa.de/vigenere-solver

[AFCTF 2018]可怜的RSA
题目给了一个 flag.enc 和 public.key
openssl rsa -pubin -text -modulus -in warmup -in public.key > 123.txt
1 | Public-Key: (2070 bit) |
n转10进制
1 | n = 79832181757332818552764610761349592984614744432279135328398999801627880283610900361281249973175805069916210179560506497075132524902086881120372213626641879468491936860976686933630869673826972619938321951599146744807653301076026577949579618331502776303983485566046485431039541708467141408260220098592761245010678592347501894176269580510459729633673468068467144199744563731826362102608811033400887813754780282628099443490170016087838606998017490456601315802448567772411623826281747245660954245413781519794295336197555688543537992197142258053220453757666537840276416475602759374950715283890232230741542737319569819793988431443 |
flag.enc中是经过base64加密的 所以需要先解密一下才能得到c的值
之前没遇到过这种,解密完cipher就不知道咋做了 看了下提示和别人的wp 需要加密时使用了padding

1 | import base64 |
[AFCTF 2018]BASE
本来py base64库一点点解码的 发现是疯狂套娃有点麻烦
看了下wp 直接循环
1 | import base64 |
[HGAME 2023 week1]RSA
题目
1 | from Crypto.Util.number import * |
WP
1 | import gmpy2 |
[LitCTF 2023]Euler
题目
1 | from Crypto.Util.number import * |
WP
1 |
|
[HDCTF 2023]Math_Rsa
题目
1 | from Crypto.Util.number import * |
分析
a=pow(p,2,r)
a = p^2 mod r ,a r 已知 可以进一步求出p 求出p后 n//p 得到q 然后在求phi d m
WP
1 |
|
[HGAME 2022 week3]Multi Prime RSA 【欧拉函数】
题目
1 | from Crypto.Util.number import getPrime |
output
1 | p = 61789932148719477384027458333380568978056286136137829092952317307711908353477 |
分析
n可以分成多个素数 且 p q r s 都已知 算出phi来 求d 再求m即可
通过欧拉函数 计算phi(n) 带入然后拆分即可
WP
1 | # n = p ** 2 * q ** 3 * r ** 5 * s ** 7 |