[SWPUCTF 2021 新生赛]crypto解题思路
题目来源
NSSCTF | 在线CTF平台
[SWPUCTF 2021 新生赛]crypto6
WriteUp
打开txt后如下
可以发现是base64、base64、base64逆解码
或者是base16、base32、base64逆解码
方法如下
Base64解码:
1.首先将十六进制编码的字符串解码为二进制数据。
2.然后将Base32编码的字符串解码为二进制数据。
3.最后将Base64编码的字符串解码为二进制数据。
脚本如下:
import base64
res = '4A5A4C564B36434E4B5241544B5432454E4E32465552324E47424758534D44594C4657564336534D4B5241584F574C4B4B463245365643424F35485649534C584A5A56454B4D4B5049354E47593D3D3D'
# 首先将十六进制编码的字符串解码为二进制数据
decoded_hex = base64.b16decode(res)
# 然后将Base32编码的字符串解码为二进制数据
decoded_b32 = base64.b32decode(decoded_hex)
# 最后将Base64编码的字符串解码为二进制数据
decoded_b64 = base64.b64decode(decoded_b32)
# 将解码后的数据格式化为特定字符串并打印
print(b'NSSCTF{' + decoded_b64 + b'}')
[SWPUCTF 2021 新生赛]crypto7
WriteUp
这个题打开txt后发现是md5,这里大家了解一下MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,能够生成128位(16字节)的哈希值,通常以32位十六进制数表示。这里发现txt里面的内容是md5我使用md5在线解密破解,md5解密加密创立18年的md5解密网站,支持md5解密,sha1解密等多种类型实时解密和破解。数据库大,使用3PB硬盘仓库。成功率高,如果本站解密不了,那就没有办法了。https://www.cmd5.com/
[SWPUCTF 2021 新生赛]crypto8
WriteUp
这个题打开txt后随波逐流爆破就行
[SWPUCTF 2021 新生赛]ez_caesar
WriteUp
打开py后有一个凯撒密码的加密函数 caesar,
base64 编码的字符串 U1hYSFlLe2R0em1mYWpwc3RiaGZqeGZ3fQ==
这里给大家讲一下base64
Base64的原理
- 数据分块:将输入的二进制数据分成每块3个字节(24位)。
- 转换为字符:每个24位的块被分成4个6位的组。每个6位的组可以表示一个0到63之间的数字。
- 查找字符:使用一个Base64字符集(通常是A-Z, a-z, 0-9, +, /)将这些数字转换为对应的字符。
- 填充:如果输入数据的字节数不是3的倍数,Base64会用“=”字符进行填充,以确保输出的长度是4的倍数。
凯撒密码(Caesar Cipher)是一种简单的替换加密算法,以古罗马将领尤利乌斯·凯撒的名字命名。它通过将字母表中的每个字母替换为其后面固定位置的字母来加密信息。凯撒密码的原理简单易懂,适合初学者学习密码学的基本概念。
凯撒密码的原理
-
字母表偏移:选择一个固定的偏移量(通常称为“密钥”),例如3。然后将字母表中的每个字母向后移动这个偏移量。例如,字母“A”会变成“D”,字母“B”会变成“E”,依此类推。
-
加密过程:
- 将明文中的每个字母替换为偏移后的字母。
- 如果字母超出了字母表的范围,则从字母表的开头继续。例如,字母“Z”在偏移3后会变成“C”。
-
解密过程:
- 使用相同的偏移量,将加密后的字母向前移动相同的位数,以恢复原始明文。
有两种解法:
第一种:base64跟凯撒两个直接在随波逐流解就行
第二种 :根据题目写py脚本,我在vs code执行的脚本,大家可以在扩展中添加python
脚本如下:
import base64
# 解码 base64 字符串
encoded_str = "U1hYSFlLe2R0em1mYWpwc3RiaGZqeGZ3fQ=="
decoded_bytes = base64.b64decode(encoded_str)
decoded_str = decoded_bytes.decode('utf-8')
print(decoded_str)
def caesar_decrypt(ciphertext, shift=5):
str_list = list(ciphertext)
i = 0
while i < len(ciphertext):
if not str_list[i].isalpha():
str_list[i] = str_list[i]
else:
a = "A" if str_list[i].isupper() else "a"
str_list[i] = chr((ord(str_list[i]) - ord(a) - shift) % 26 + ord(a))
i = i + 1
return ''.join(str_list)
# 解码 base64 字符串
encoded_str = "U1hYSFlLe2R0em1mYWpwc3RiaGZqeGZ3fQ=="
decoded_bytes = base64.b64decode(encoded_str)
decoded_str = decoded_bytes.decode('utf-8')
# 解密凯撒密码
decrypted_str = caesar_decrypt(decoded_str)
print(decrypted_str)
运行后解出NSSCTF