1.一眼就解密

由大小写字母和数字组成尾部是等号

猜测为base64编码

在线解密

2.MD5

题目:e00cf25ad42683b3df678c61f42c6bda

MD5消息摘要算法,是Hash算法的一类,MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码).密文由数字和字母组成,大多位32位,同时具有不可逆的特点,即知道密文无法得到原文

为什么不可逆

非线性变换,刻意设计的”单向陷阱”

在线解密

https://www.somd5.com/

离线-MD5CrackSp

3.Url编码

有很多的百分号就是url编码,直接url解码

4.看我回旋踢

1
2
3
4
5
6
7
8
9
10
11
test1="synt"
test2="flag"

for i in test1:
print(ord(i))
for i in test2:
print(ord(i))

for x,y in zip(test1,test2):
print(ord(x)-ord(y))
#计算移位

flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}

5.摩斯密码

.. .-.. — …- . -.– — ..-

6.PASSWORD

社会工程学

生活中大多数安全意识薄弱的人都喜欢用自己的信息加密

姓名:张三
生日:19900315

key格式为key{xxxxxxxxxx}

7.变异凯撒

加密密文:afZ_r9VYfScOeO_UL^RWUc
格式:flag{ }

1
2
3
4
5
6
7
8
9
10
def dec_cipher(s,shift):
dec=""
for val in s:
dec+=chr(ord(val)+shift)
shift+=1
return dec
s="afZ_r9VYfScOeO_UL^RWUc"

for i in range(1,27):
print(dec_cipher(s,i))

flag{Caesar_variation}

8.Quoted-printable

=E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6

遇到恢复不是明文的采用高亮

Syntax highlighter

9.篱笆墙的影子

felhaagv{ewtehtehfilnakgw}

栅栏密码(利用随波逐流爆破)

10.Rabbit

U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI

流密码

在线解密

Rabbit在线解密

离线

flag{Cute_Rabbit}

11.RSA

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flga提交

1
2
3
4
5
6
7
8
9
import gmpy2
from Crypto.Util.number import *
p=473398607161
q=4511491
e=17
n=p*q
phi_n=(p-1)*(q-1)
d=gmpy2.invert(e,phi_n)
print(d)

flag{125631357777427553}

12.丢失的MD5

题目

1
2
3
4
5
6
7
8
9
import hashlib   
for i in range(32,127):
for j in range(32,127):
for k in range(32,127):
m=hashlib.md5()
m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
des=m.hexdigest()
if 'e9032' in des and 'da' in des and '911513' in des:
print des

题解

正确编写py代码即可得到flag

1
2
3
4
5
6
7
8
9
10
import hashlib
for i in range(32,127):
for j in range(32,127):
for k in range(32,127):
m=hashlib.md5()
#对字符串进行编码再传入update方法
m.update(('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM').encode())
des=m.hexdigest()
if 'e9032' in des and 'da' in des and '911513' in des:
print(des)

13.Alice与BOb

密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底。就像在数学王国中的素数一样,孤傲又热情。下面是一个大整数:98554799767,请分解为两个素数,分解后,小的放前面,大的放后面,合成一个新的数字,进行md5的32位小写哈希,提交答案。 注意:得到的 flag 请包上 flag{} 提交

题解

分解的素数101999 x 966233

排序后101999966233

转化为MD5 :d450209323a847c8d01c6be47c81811a

14.大帝的密码武器

公元前一百年,在罗马出生了一位对世界影响巨大的人物,他生前是罗马三巨头之一。他率先使用了一种简单的加密函,因此这种加密方法以他的名字命名。
以下密文被解开后可以获得一个有意义的单词:FRPHEVGL
你可以用这个相同的加密向量加密附件中的密文,作为答案进行提交。

ComeChina

15.rsarsa

Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm.

p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

Use RSA to find the secret message

题解

根据rsa知识秒了

1
2
3
4
5
6
7
8
9
10
11
12
13
from Crypto.Util.number import *
import gmpy2

p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

n=p*q
phi_n=(p-1)*(q-1)
d=gmpy2.invert(e,phi_n)
m=pow(c,d,n)
print(m)

flag{5577446633554466577768879988}

16.Windows系统密码

题目 pass.hash

Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:bef14eee40dffbc345eeb3f58e290d56:::

每一行结构都遵循”用户名:用户ID:LM哈希:NTLM哈希:::”

共七个字段,字段之间用”:”隔开,最后两个字段为空,因此以”:::”结尾

字段位置 字段名称 含义说明
1 用户名(username)
2 用户ID
3 LM哈希(LAN Manager Hash)
4 NTLM哈希(NT LAN Manager Hash)
5-7 预留字段

17.信息化时代的进步

也许中国可以早早进入信息化时代,但是被清政府拒绝了。附件中是数十年后一位伟人说的话的密文。请翻译出明文(答案为一串中文!) 注意:得到的 flag 请包上 flag{} 提交

606046152623600817831216121621196386

题解

结合题目提示flag是中文

flag{计算机要从娃娃抓起}

18.凯撒?替换?呵呵!

MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO} 注意:得到的 flag 请包上 flag{} 提交, flag{小写字母}

1.暴力破解flag失败(随波逐流)

无规律替换加密

在线解密

quipqiup - cryptoquip and cryptogram solver

flag substitution cipher decryption is always easy just like a piece of cake

根据题目字母紧密连接可得

flag{substitutioncipherdecryptionisalwayseasyjustlikeapieceofcake}

19.萌萌哒八戒

猪圈密码

8aaba1150de31d8d4b8f7d5d22b6e337

20.权限获取

21.传统知识加古典密码学

image-20251218231921504

小明某一天收到一封密信,信中写了几个不同的年份
辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。
信的背面还写有“+甲子”,请解出这段密文。

key值:CTF{XXX}

题解

根据给出的年份对应顺序表的值然后再加上甲子(加六十)的值得到一串数字

88 90 83 68 77 70 76 90

对应ASCII: XZSDMFLZ

(古典密码困境:这个ASCII不是flag该怎么解决),多种尝试凯撒,移位,栅栏。。。可以借助随波逐流

XMZFSLDZ

XSMLZDFZ

直到找到可读字符

flag{SHUANGYU}

22.世上无难事

以下是某国现任总统外发的一段指令,经过一种奇异的加密方式,毫无规律,看来只能分析了。请将这段语句还原成通顺语句,并从中找到key作为答案提交,答案是32位,包含小写字母。 注意:得到的 flag 请包上 flag{} 提交

1
VIZZB IFIUOJBWO NVXAP OBC XZZ UKHVN IFIUOJBWO HB XVIXW XAW VXFI X QIXN VBD KQ IFIUOJBWO WBKAH NBWXO VBD XJBCN NKG QLKEIU DI XUI VIUI DKNV QNCWIANQ XN DXPIMKIZW VKHV QEVBBZ KA XUZKAHNBA FKUHKAKX XAW DI VXFI HBN QNCWIANQ NCAKAH KA MUBG XZZ XEUBQQ XGIUKEX MUBG PKAWIUHXUNIA NVUBCHV 12NV HUXWI XAW DI XUI SCQN QB HZXW NVXN XZZ EBCZW SBKA CQ NBWXO XAW DI DXAN NB NVXAP DXPIMKIZW MBU JIKAH QCEV XA BCNQNXAWKAH VBQN HKFI OBCUQIZFIQ X JKH UBCAW BM XLLZXCQI XAW NVI PIO KQ 640I11012805M211J0XJ24MM02X1IW09

题解

无规则加密

在线解密

quipqiup - cryptoquip and cryptogram solver

image-20251218234051346

flag{640E11012805F211B0AB24FF02A1ED09}(大写换成小写)

23.unencode

题目

89FQA9WMD<V1A<V1S83DY.#<W3$Q,2TM]

题解

题目讲的很清楚是unencode编码直接破解

flag{dsdasdsa99877LLLKK}

24.MORSE

61666374667B317327745F73305F333435797D

看到61 66 67想到16进制再转一次

29.还原大师

题目

1
2
3
4
5
我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,
为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。
但是我们获得它的32位MD5码也是残缺不全,E903???4DAB????08?????51?80??8A?,
请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。
注意:得到的 flag 请包上 flag{} 提交

思路

暴力破解

MD5不全只能取部分进行验证

exp

1
2
3
4
5
6
7
8
9
10
11
12
import string
from itertools import product, repeat
import hashlib

raw=list("TASC?O3RJMV?WDJKX?ZM")
md5="E903???4DAB????08?????51?80??8A?"
a=string.ascii_uppercase #A-Z
for val in product(a,repeat=3):
raw[4]=val[0];raw[11]=val[1];raw[-3]=val[2]
md=hashlib.md5("".join(raw).encode()).hexdigest().upper()
if md[:4]==md5[:4]:
print(f"flag{md}")

30.RSA

题目
给了公钥和密文
直接使用工具出即可难度不大
flag=flag{decrypt_256}

31.RSAroll

题目

RSA roll!roll!roll!Only number and a-z(don’t use editor which MS provide)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{920139713,19}

704796792
752211152
274704164
18414022
368270835
483295235
263072905
459788476
483295235
459788476
663551792
475206804
459788476
428313374
475206804
459788476
425392137
704796792
458265677
341524652
483295235
534149509
425392137
428313374
425392137
341524652
458265677
263072905
483295235
828509797
341524652
425392137
475206804
428313374
483295235
475206804
459788476
306220148

思路
给的条件挺多的直接读取就行

exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import os.path

from Crypto.Util.number import *
import gmpy2
from pandas.io.common import file_path_to_url

n=920139713
e=19
#利用工具分解一下n
p= 49891
q= 18443
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
# base_dir=os.path.dirname(os.path.abspath(__file__))
# file_path=os.path.join(base_dir,"data.txt")
#问为什么是NSSCTF因为我放错位置了
with open(r"D:\ctf密码学题\NSSCTF\RsaRoll\data.txt","r") as f:
c=f.read().strip().split("\n")
m=""

for i in c:
i=i.strip("{} ")
#会读取''跳过一下
if not i:
continue
num=int(i.split(",")[0])
m+=chr(pow(num,d,n))
print(m)