前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BUUCTF 刷题笔记——Crypto 1

BUUCTF 刷题笔记——Crypto 1

作者头像
h-t-m
发布2023-03-15 11:33:57
1.3K0
发布2023-03-15 11:33:57
举报
文章被收录于专栏:h-t-mh-t-m

BUUCTF 刷题笔记——Crypto 1

摩丝

本题提供一个文本文件,内含如下文本,很明显这是摩斯电码。

代码语言:javascript
复制
.. .-.. --- ...- . -.-- --- ..-

以下为基本字母数字与其对应的摩斯电码表,对照表逐个解码即可。

字符

电码符号

字符

电码符号

字符

电码符号

字符

电码符号

A

.━

B

━ ...

C

━ .━ .

D

━ ..

E

F

..━ .

G

━ ━ .

H

....

I

..

J

.━ ━ ━

K

━ .━

L

.━ ..

M

━ ━

N

━ .

O

━ ━ ━

P

.━ ━ .

Q

━ ━ .━

R

.━ .

S

...

T

U

..━

V

...━

W

.━ ━

X

━ ..━

Y

━ .━ ━

Z

━ ━ ..

0

━ ━ ━ ━ ━

1

.━ ━ ━ ━

2

..━ ━ ━

3

...━ ━

4

....━

5

.....

6

━ ....

7

━ ━ ...

8

━ ━ ━ ..

9

━ ━ ━ ━ .

解码结果为 ILOVEYOU

password

本题提供的文本内容如下,需要我们根据已有信息猜密码。

代码语言:javascript
复制
姓名:张三 
生日:19900315

key格式为key{xxxxxxxxxx}

密码共十位,已有信息可作为密码的有 zhangsan 以及生日数字序列 19900315,因此对该信息的全部或者部分提取并排列组合便可得出密码,当然本题较为简单,密码为 zs19900315。

变异凯撒

本题提供的文本内容如下,并提示这是变异凯撒。

代码语言:javascript
复制
加密密文:afZ_r9VYfScOeO_UL^RWUc
格式:flag{ }

凯撒密码只是进行简单的操作操作,但是上述密文出现了数字以及 _、^ 等特殊字符,因此很可能是依照 ASCII 码表的移位操作。由于格式固定,即前五位为 flag{ 五个字符,可借此找出规律。

明文字符(码值)

密文字符(码值)

差值

f(102)

a(97)

5

l(108)

f(102)

6

a(97)

Z(90)

7

g(103)

_(95)

8

{(123)

r(114)

9

由上述表格中的数据可确认加密方式为按 ASCII 码表进行位移且位移大小逐个递增。

那写个脚本反推一下就行了。

代码语言:javascript
复制
str = "afZ_r9VYfScOeO_UL^RWUc"
n = 5
flag = ""

for i in str:
    flag += chr(ord(i) + n)
    n += 1

print(flag)

得出 flag 为 flag{Caesar_variation}。

Quoted-printable

本题提供的文本内容如下,提示为 Quoted-printable 编码。

代码语言:javascript
复制
=E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6

Quoted-printable 编码每三位表示一字节的数据,等号后即为两位十六进制数,可直接对应于该字节的数据。由于大部分用于非 ASCII 码表中的可打印字符,因此手算不现实,直接工具解码即可。

解码出的结果为 那你也很棒哦。

Rabbit

本题提供的文本内容如下,提示为 Rabbit 加密。

代码语言:javascript
复制
U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI

有意思的加密方法,了解密文特征即前缀 U2FsdGVkX1 即可。剩下的直接丢进 解密网站 就行。

解密的结果为 Cute_Rabbit

篱笆墙的影子

本题提供的文本如下,提示篱笆墙的影子,根据密文样式及 flag 的默认前缀 flag{ 合理推测标题暗示栅栏密码。

代码语言:javascript
复制
felhaagv{ewtehtehfilnakgw}

所谓栅栏密码,就是把要加密的明文分成 N 个一组,然后循环把每组的首个字符取出来,形成一段无规律的话。观察可知 N 为 2 即可提取出 flag,也就是取一个字符后隔一个字符再取,然后循环直至取完所有字符。因此 falg 为 flag{wethinkwehavetheflag}。

RSA

本题提供的文本如下,要求解密 RSA。

代码语言:javascript
复制
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flga提交

有了ppp 和qqq 值就可以求φ(n)=(p−1)(q−1)φ(n)=(p-1)(q-1)φ(n)=(p−1)(q−1),值为213573308221626840021357330822162684002135733082216268400。由于ddd 满足(d∗e)modφ(n)=1(d*e)modφ(n)=1(d∗e)modφ(n)=1,其他条件都已知,所以ppp 值就可以很容易求了吧?写个脚本来算。

代码语言:javascript
复制
import gmpy2

p = 473398607161
q = 4511491
e = 17

phi_n = (p - 1) * (q - 1)
d = gmpy2.invert(e, phi_n)

print(d)

解出ddd 值为125631357777427553125631357777427553125631357777427553。

丢失的MD5

本题提供一段 Python 代码。

代码语言:javascript
复制
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

由于是 Python2 代码,换成 Python3 环境运行需要为 print() 函数加上括号。尝试执行程序,发现报错了。

提示在计算哈希值之前需要对数据进行编码,因此将待加密的明文字符串加上编码操作即可,修改代码如下,建议指定编码为 utf-8,以免出现默认编码的问题。

代码语言:javascript
复制
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').encode())
            m.update(('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM').encode("utf8"))
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print(des)

计算结果为 e9032994dabac08080091151380478a2,实测该值即为 flag,所以本题考的是编程。

Alice与Bob

本题考查对985547997679855479976798554799767​ 的质数分解,分解出后组合进行 md5 加密即可。质数分解使用 yafu 工具完成即可,分解结果为966233∗101999966233*101999966233∗101999。

代码语言:javascript
复制
命令行>yafu-x64.exe factor(98554799767)


fac: factoring 98554799767
fac: using pretesting plan: normal
fac: no tune info: using qs/gnfs crossover of 95 digits
div: primes less than 10000
fmt: 1000000 iterations
Total factoring time = 0.0089 seconds


***factors found***

P6 = 966233
P6 = 101999

ans = 1

将101999966233101999966233101999966233 进行 md5 加密即可,加密结果为 d450209323a847c8d01c6be47c81811a。

大帝的密码武器

本题提供一个 zip 文件,由于没有后缀名,因此无法打开,按提示修改后缀为 zip 即可。包含两个文本文件,其内容如下。

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

密文:
ComeChina

即使用凯撒密码加密,但是偏移值需要自行求出,依据为 FRPHEVGL 解密后为有意义的单词。部分不同偏移值对应的明文如下表,但偏移为 13 时解密后为单词 security,因此偏移为 13。

偏移值

明文

2

DPNFCTEJ

3

COMEBSDI

4

BNLDARCH

5

AMKCZQBG

6

ZLJBYPAF

7

YKIAXOZE

8

XJHZWNYD

9

WIGYVMXC

10

VHFXULWB

11

UGEWTKVA

12

TFDVSJUZ

13

SECURITY

使用测算出来的偏移量 13 对题给密文进行解密操作后可得 PbzrPuvan,即本题答案。

rsarsa

本题提供文本如下,给出p、q、e、cp、q、e、cp、q、e、c 的值让我们求明文。

代码语言:javascript
复制
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

由已给值直接写个脚本进行计算即可。

代码语言:javascript
复制
import gmpy2

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

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

print(m)

计算结果为557744663355446657776887998855774466335544665777688799885577446633554466577768879988。

Windows系统密码

题目给了一个 pass.hash 文件,其内容如下,文件名暗示均为哈希值。

代码语言:javascript
复制
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:bef14eee40dffbc345eeb3f58e290d56:::

由于这些值均使用冒号分割为了八段 32 位的序列,大概率为 md5 算法,因此逐个进行解密,第四段成功解出 flag 为 good-luck。

信息化时代的步伐

本题提供文本内容如下,提示为清后数十年一位伟人说的话,且为一串中文。

代码语言:javascript
复制
606046152623600817831216121621196386

纯数字序列,合理猜测为中文电码,利用在线工具直接加密结果为计算机要从娃娃抓起。邓小平说的。

凯撒?替换?呵呵!

题目提供一串类似 flag 形式的字符串,标题提示应该又是凯撒?

代码语言:javascript
复制
MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO}

测试了所有偏移值后仍无对应 flag 的值出现,因此应该为进阶款的凯撒,使用 在线工具 进行爆破。参考条件为 mthj 解密后为 flag,结果如下,其中仅第一条为可读明文。

因此解密明文如下:

代码语言:javascript
复制
flag{substitutioncipherdecryptionisalwayseasyjustlikeapieceofcake}

萌萌哒的八戒

  • 本题提供一张图片如下,包含一串奇怪的密文,由猪元素推测为猪圈密码。

  • 猪圈密码就很有意思了,原理如下图所示,不同符号对应不同字符,参考字符表进行解密即可。

解密后的明文为 whenthepigwanttoeat。

传统知识+古典密码

本题含有两个文本文件,内容如下。

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

key值:CTF{XXX}

首先解决传统知识的问题,在六十甲子中辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳分别对应序号为 28、30、23、08、17、10、16、30,加一甲子就是加 60,则数字序列又变成了 88、90、83、68、77、70、76、90。对应于 ASCII 码表中也就是字符串 XZSDMFLZ。

至于古典密码主要就是凯撒与栅栏了,由于对此没有任何提示,因此只能挨个试。这也太过分了。最终经过栅栏密码的 4 栏加密以及凯撒密码的 5 偏移得到的稍微顺眼的字符串 shuangyu 即为答案。

总结

  尝试接触这么些个密码学的题目,总体来说并没有接触到特别复杂的考题,但是却了解到了相当多的加密算法。又多又杂的算法,虽然大多都有工具来帮助完成,但是光是识别算法类型就够呛了。很开心自己并不需要去研究去开发加密算法,仅仅只需要用好别人的工具就能完成大部分工作。

  BUU 上的练习题到这各个方向我就都路过了一遍了,虽然对个人技术并无多少提升,但总归是对整体有了更深入的认识。各方向的试水刷题就到此为止了,不过,这也才刚刚开始,接下来就是日常刷题学习了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • BUUCTF 刷题笔记——Crypto 1
    • 摩丝
      • password
        • 变异凯撒
          • Quoted-printable
            • Rabbit
              • 篱笆墙的影子
                • RSA
                  • 丢失的MD5
                    • Alice与Bob
                      • 大帝的密码武器
                        • rsarsa
                          • Windows系统密码
                            • 信息化时代的步伐
                              • 凯撒?替换?呵呵!
                                • 萌萌哒的八戒
                                  • 传统知识+古典密码
                                    • 总结
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档