0%

潘潘的做题思路

2025-01-15 12:52By
pkkcsa
凯撒密码Base家族古典密码

Problem: [SDCTF 2022]Case64AR

思路

  • 解题大致思路

首先,分析题目,还是英文,翻译过来意思就是这次的加密是现代加密和古典加密方法的结合(感觉这明明是Crypto的题,怎么放到misc里面,但是这是misc,也算挺合理),标题是Case64AR,显然有base64,然后C开头的古典加密算法,既然是misc,肯(坑)定不会出很鲜为人知的,所以大概率是凯撒加密。至于后面的AR,我承认我想多了,一开始还以为会不会是AES(服了自己)

那么知道是凯撒密码和base64了,但是怎么结合在一起,这又是一个值得思考的问题。

于是,开始观察密文,发现密文有明显的base64编码的特点,并根据名字Case64,大胆猜想,是先凯撒加密后进行base64,于是我先将密文base64解码,然后穷举所有可能的凯撒加密,但是结果并不如意(每一个打印出来都看不得)。正当我百思不得其解时,我发现我刚刚的思路更是猜成一种顺序加密,而不是描述中的“融合”,所有我在想base64编码中,哪一步可以把凯撒加密结合进去,发现在base64中,替换标准表时可以加入偏移量,也就是在这加入凯撒加密,穷举所有偏移量,发现14时,可以成功打印出flag。

如果,难以理解的话,我举个例子:就比如明文是:"Hello, world!",那么正常base64编码的结果是:"SGVsbG8sIHdvcmxkIQ==",但是这里加入了偏移量(也就是凯撒加密),原来索引18对于标准表中的“S”,加入14偏移量后,索引就变成了32,那么这样就变成对于的“O”,那么最后就编码成“OUJqfJUq WVpbBuhxZGE==”。

EXP

  • 具体攻击代码
import base64

# Base64 编码表
base64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="

# 加密的字符串
enc = 'OoDVP4LtFm7lKnHk+JDrJo2jNZDROl/1HH77H5Xv'

# 遍历所有可能的偏移量
for n in range(64):
    dec = ""  # 用于存储当前偏移量下的 Base64 编码结果

    # 遍历密文中的每个字符
    for char in enc:
        # 找到字符在 Base64 编码表中的索引
        i = base64_table.index(char)
        # 计算新的索引,向后移动 offset 位
        new_index = (i + n) % 64
        # 根据新的索引找到对应的字符,并加入结果字符串
        dec += base64_table[new_index]

    try:
        # 尝试解码 Base64,如果成功则打印结果
        flag = base64.b64decode(dec).decode('utf-8')
        print(f"偏移 {n}: {flag}")
    except Exception:
        # 如果 Base64 解码失败(无效编码字符串),跳过
        print(f"偏移 {n}: Invalid Base64 string")

总结

  • 对该题的考点总结

凯撒加密 base64

还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论