网站集合:

中国电码:

https://dianma.bmcx.com/

Rabbit:

https://www.sojson.com/encrypt_rabbit.html

恺撒:

https://quipqiup.com/

MD5:

https://www.cmd5.com/

http://www.xmd5.com/

https://cmd5.la/user/index.php

猪圈:

http://www.hiencode.com/pigpen.html

爆破:

https://quipqiup.com/

JSfuck:

https://www.bugku.com/tools/jsfuck/#

维吉尼亚

https://www.guballa.de/vigenere-solver

一、中国电码

参考:BUUCTF信息化时代的步伐

题干:606046152623600817831216121621196386

网站:https://dianma.bmcx.com/

二、Rabbit

Rabbit 加解密算法是一种流密码(stream cipher),它由 David Wheeler 和 Roger Needham 在 2003 年提出,并在 2004 年发布了相关的算法文档。Rabbit 算法的设计目的是提供一个高速且高效的加密方法,用于在资源受限的设备上进行加密操作(例如嵌入式系统和无线通信等)。Rabbit 使用的是一种基于状态的流密码机制,能够对任意长度的数据进行加密。

Rabbit 加解密算法的工作原理

1. 流密码(Stream Cipher)概述

流密码加密算法通过生成一个密钥流并与明文进行逐位异或(XOR)操作来加密数据。这个密钥流通常是由密钥和初始向量(IV,Initialization Vector)生成的,密钥流的长度和数据长度相同。加密的过程就是将明文与密钥流进行逐位异或,解密过程则相同,因为异或操作是可逆的。

2. Rabbit算法的核心思想

Rabbit算法通过一个状态机来生成伪随机的密钥流。Rabbit的状态机是由一个128位的密钥和64位的初始化向量(IV)所定义的。算法的基本步骤是:

初始化:使用128位的密钥和64位的IV初始化Rabbit的状态机。

生成密钥流:通过状态机生成伪随机的密钥流。

加密/解密:将明文与生成的密钥流逐位异或(XOR),得到密文。由于流密码的对称性,使用相同的密钥流可以将密文解密还原为明文。

3. Rabbit算法的结构

Rabbit算法由三个主要组件组成:

1)状态寄存器: Rabbit的状态由一个256位的寄存器表示,分为4个64位的寄存器:

X0, X1, X2, X3:64位的寄存器,存储伪随机的状态信息。

Y0, Y1, Y2, Y3:64位的寄存器,辅助生成密钥流。

2)一步都包括复杂的位移、加法和异或操作。

3)密钥流生成: Rabbit通过对X0、X1、X2、X3和Y0、Y1、Y2、Y3进行一系列操作,生成新的64位密钥流。每生成一次64位密钥流,就会对状态寄存器进行更新,循环生成伪随机的密钥流。

4.Rabbit的加密/解密过程

  • 初始化

    • 将128位的密钥和64位的IV输入到Rabbit算法,初始化8个寄存器(4个64位的X寄存器和4个64位的Y寄存器)。
  • 生成密钥流

    • 在每个加密或解密循环中,Rabbit通过状态机生成64位密钥流。
    • 生成的64位密钥流与待加密的明文进行异或操作,从而得到加密后的密文。
  • 加密

    1. 生成64位密钥流。
    2. 使用密钥流与明文进行逐位异或(XOR)操作,得到密文。
  • 解密

    1)同样生成相同的64位密钥流。

    2)使用密钥流与密文进行逐位异或(XOR)操作,恢复原始明文。

由于Rabbit是一种流密码,它的加密过程与解密过程完全相同,都是基于对称密钥和密钥流进行异或操作。

5、Rabbit算法的具体步骤

  • 输入

    • 密钥:128位。
    • 初始向量(IV):64位。

    状态初始化: Rabbit算法的状态初始化步骤涉及将密钥和IV填充到X寄存器和Y寄存器中,形成初始的状态。

    密钥流生成: Rabbit通过以下步骤来生成密钥流:

    1. 根据当前的状态计算新的密钥流。
    2. 通过特定的函数对寄存器中的数据进行处理,更新状态。
    3. 生成新的伪随机密钥流。
    4. 继续重复这一过程直到处理完所有的明文数据。

    异或加解密: 生成的密钥流与明文进行异或操作,得到密文。解密时也使用相同的密钥流对密文进行异或操作,恢复出原始明文。

参考:BUUCTF Rabbit

题干:U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI

网站:https://www.sojson.com/encrypt_rabbit.html

三、凯撒

参考:BUUCTF凯撒?替换?呵呵!

题干:MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO}

网站:https://quipqiup.com/

解题:MTHJ=flag爆破

屏幕截图_24-11-2024_21253_quipqiup.com

四、哈希函数

1、MD5与hash的关系

(1) Hash 函数:

Hash 是一种将任意大小的数据(通常是字符串)转换为固定大小输出的函数。它的主要特点包括:

  • 固定长度输出:无论输入数据的大小如何,输出的 hash 值(通常称为散列值)长度是固定的。
  • 快速计算:hash 函数计算速度较快,适合大数据量的处理。
  • 不可逆:hash 函数是单向的,意味着从 hash 值无法逆向恢复原始输入数据。
  • 碰撞性:不同的输入数据可能产生相同的 hash 值,这种现象被称为碰撞。好的 hash 函数应当尽量减少碰撞的概率。
  • 广泛应用:hash 函数用于数据检索、文件完整性验证、密码存储等场景。

常见的 hash 函数包括:

  • SHA-1(不再安全,已被弃用)
  • SHA-256
  • SHA-512
  • MD5(曾经广泛使用,但现在已不安全)

(2)MD5(Message-Digest Algorithm 5)

MD5 是一种特定的 hash 函数,由 Ronald Rivest 于 1991 年设计。它生成一个 128 位(16 字节)长度的 hash 值,通常表示为 32 位的十六进制数字。虽然 MD5 曾经是广泛使用的哈希算法,但现在它被认为不安全,并已被许多应用场景中弃用。

MD5 的特点

  • 输出 128 位(16 字节),通常以 32 位十六进制数字表示。
  • 快速计算。
  • 初衷是用于验证文件的完整性,但由于存在碰撞漏洞,现在不再适用于安全关键任务。

(3)Hash 与 MD5 的关系

  • MD5 是一种 Hash 函数,属于更广泛的 哈希算法(hash function)类别。

  • 所有 MD5 都是 hash,但并不是所有 hash 都是 MD5。在 hash 的家族中,MD5 只是众多 hash 函数中的一种。例如,SHA-256 是另一种常见的 hash 函数,它的输出更长且更安全。

  • MD5 的局限性

    • 碰撞漏洞:MD5 的一个严重问题是,它容易产生 碰撞,即不同的输入数据可能会产生相同的 MD5 值。对于很多安全要求较高的应用(如数字签名、证书验证),这意味着 MD5 已不再安全。
    • 易受攻击:例如,攻击者可以通过 构造碰撞 来伪造文件的 MD5 校验和,造成数据篡改。

(4) MD5 的用途(曾经广泛使用)

  • 文件校验:MD5 常用于文件完整性校验,检查文件是否在传输或存储过程中发生了改变。
  • 密码存储:在早期,MD5 曾经被用来存储用户密码的 hash 值。然而,由于 MD5 的漏洞,它现在不再推荐用于密码存储。

(5)MD5 的替代品

[1]SHA-256:相较于 MD5,SHA-256(属于 SHA-2 系列)提供更强的安全性,并且几乎没有碰撞的概率,因此广泛应用于各种安全场景。

[2]bcrypt、scrypt 等:这些算法在密码存储中被推荐使用,因为它们除了加密外,还可以通过引入盐(salt)和计算强度来防止暴力破解和碰撞攻击。

2、奇奇怪怪的题

网站:

https://www.cmd5.com/

http://www.xmd5.com/

https://cmd5.la/user/index.php

[1]BUUCTF Windows系统密码

文件添加后缀txt 用记事本打开后得到

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

满足MD5三十二位十六进制数

flag{good-luck}——–a7fcb22a88038f35a8f39d503e7f0062

[2]BUUCTF还原大师

1
2
3
4
5
6
7
8
9
10
11
12
import hashlib
text = "TASC?O3RJMV?WDJKX?ZM"
for i in range (26):
temp1 = text.replace("?",chr(65+i),1)#只替换第一个?
for j in range (26):
temp2 = temp1.replace('?',chr(65+j),1)#替换第二个?
for x in range (26):
temp3 = temp2.replace('?',chr(65+x),1)#替换第三个?
textm = hashlib.md5(temp3.encode('utf-8')).hexdigest().upper()

if textm[0:4] == "E903":
print(textm)

3、加密脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import hashlib
m = input("请输入明文:")

'''
方案1:
m = open("文件地址", 'rb').read()
方案2:
with open("文件地址", 'rb') as file:
m = file.read()#注意!!!此处m为字节类型不需要转换编码
m_md5 = hashlib.md5()
'''
m_md5.update(m.encode('utf-8'))

m_md5.update(m)
md5_c = m_md5.hexdigest()
#合并代码
md5_c = hashlib.md5(m.encode('utf-8')).hexdigest()

print(f"'{m}'的MD5哈希值: {md5_c}")

五、猪圈

网站:http://www.hiencode.com/pigpen.html

对照表:

屏幕截图_26-11-2024_01820_www.hiencode.com

[1]BUUCTF 萌萌哒八戒1

2648839-20240624152748969-386259504

(不知道为什么压缩包无效了)

六、奇了八怪的玩意儿,直接爆破

网站:https://quipqiup.com/

[1]BUUCTF old-fashion

密文:Os drnuzearyuwn, y jtkjzoztzoes douwlr oj y ilzwex eq lsdexosa kn pwodw tsozj eq ufyoszlbz yrl rlufydlx pozw douwlrzlbz, ydderxosa ze y rlatfyr jnjzli; mjy gfbmw vla xy wbfnsy symmyew (mjy vrwm qrvvrf), hlbew rd symmyew, mebhsymw rd symmyew, vbomgeyw rd mjy lxrzy, lfk wr dremj. Mjy eyqybzye kyqbhjyew mjy myom xa hyedrevbfn lf bfzyewy wgxwmbmgmbrf. Wr mjy dsln bw f1_2jyf-k3_jg1-vb-vl_l

爆破结果:

屏幕截图_26-11-2024_1518_quipqiup.com

flag{n1_2hen-d3_hu1-mi-ma_a}

七、转轮机加密

原理:

是托马斯·杰斐逊,是转轮加密。我们先了解一下转轮加密的原理:托马斯-杰弗逊转轮加密由三串字符串组成,第一部分为加密表,第二部分为密钥,第三部分为密文。加密表就是我们需要利用密钥和密文来进行加密。

攻防世界:转轮机加密

1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE <
2: < KPBELNACZDTRXMJQOYHGVSFUWI <
3: < BDMAIZVRNSJUWFHTEQGYXPLOCK <
4: < RPLNDVHGFCUKTEBSXQYIZMJWAO <
5: < IHFRLABEUOTSGJVDKCPMNZQWXY <
6: < AMKGHIWPNYCJBFZDRUSLOQXVET <
7: < GWTHSPYBXIZULVKMRAFDCEONJQ <
8: < NOZUTWDCVRJLXKISEFAPMYGHBQ <
9: < XPLTDSRFHENYVUBMCQWAOIKZGJ <
10: < UDNAJFBOWTGVRSCZQKELMXYIHP <
11: < MNBVCXZQWERTPOIUYALSKDJFHG <
12: < LVNCMXZPQOWEIURYTASBKJDFHG <
13: < JZQAWSXCDERFVBGTYHNUMKILOP <

密钥为:2,3,7,5,13,12,9,1,8,10,4,11,6
密文为:NFQKSEVOQOFNP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import re
sss='''1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE < 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 3: < BDMAIZVRNSJUWFHTEQGYXPLOCK < 4: < RPLNDVHGFCUKTEBSXQYIZMJWAO < 5: < IHFRLABEUOTSGJVDKCPMNZQWXY < 6: < AMKGHIWPNYCJBFZDRUSLOQXVET < 7: < GWTHSPYBXIZULVKMRAFDCEONJQ < 8: < NOZUTWDCVRJLXKISEFAPMYGHBQ < 9: < XPLTDSRFHENYVUBMCQWAOIKZGJ < 10: < UDNAJFBOWTGVRSCZQKELMXYIHP < 11 < MNBVCXZQWERTPOIUYALSKDJFHG < 12 < LVNCMXZPQOWEIURYTASBKJDFHG < 13 < JZQAWSXCDERFVBGTYHNUMKILOP <
'''
m="NFQKSEVOQOFNP"#密文
content=re.findall(r'< (.*?) <',sss,re.S)
iv=[2,3,7,5,13,12,9,1,8,10,4,11,6] #密钥
vvv=[]
ans=""
for i in range(13):
index=content[iv[i]-1].index(m[i])
vvv.append(index)
for i in range(0,26):
flag=""
for j in range(13):
flag+=content[iv[j]-1][(vvv[j]+i)%26]
print (flag)

八、维吉尼亚

例题

[1]0xGame

1
0lCcop{oyd94092-g8mq-4963-88b6-4helrxdhm6q7}

flag对应0xgame的开头

行头表示明文字母,列头为关键字,交点为密文字母

运算公式:密文-关键字mod26

步骤:密文-关键字 若结果为负数+26得到明文

对照维吉尼亚表获得密钥20200502012035416

横排为目标flag格式 表内部为密文所对应字母,以此对应最左边竖排字母找到密钥owccl

0xGame{acb94092-e8bc-4963-88f6-4fcadbbfb6c7}

[2]MRCTF2020 Vigenere

原文网站爆破得到最后一行flag is arctf vigebere cryptc crack man, dlease add inderscors and curly praces.

flag为flag{vigebere_cryptc_crack_man}

九、JSfuck

解密网址:https://www.bugku.com/tools/jsfuck/#

内容:

  • false => ![]
  • 真 => !![]
  • 未定义 => [][[]]
  • NaN => +[![]]
  • 0 => +[]
  • 1 => +!+[]
  • 2 => !+[]+!+[]
  • 10 => [+!+[]]+[+[]]
  • 数组 => []
  • 数字 => +[]
  • 字符串 => []+[]
  • 布尔值 => ![]
  • 函数 => [][“filter”]
  • eval => [][“filter”][“constructor”]( 代码 )()
  • window => [][“filter”][“constructor”](“return this”)()

例BUUCTF这是什么

解题:附件格式为apk 手动改为zip(俺打不开,改成7z打开了)

用记事本打开WordDocument

屏幕截图 2024-12-11 171222

放入网址得到flag{a0448fd730b62c13ca80200c4529daa2}

十、准银河字母

准银河字母

十一、圣堂武士(templar)

圣堂武士

十二、猪圈密码

传统猪圈密码猪圈

新猪圈密码

变异猪圈

十三、Atbash cipher古埃及象形

atbash cipher古埃及象形

参考:BUUCTF NPUCTF classical cipher