变异凯撒(实验吧CTF题库-密码学)

变异凯撒(实验吧CTF题库-密码学)

题目概述

分值:10 难度:易 解题通过率:92%
加密密文:afZ_r9VYfScOeO_UL^RWUc
格式:flag{ }
题目链接:http://www.shiyanbar.com/ctf/2038

基础知识

根据题目名称“变异凯撒”可以推断这个题应该是用了凯撒加密的变异形式。
我们先来了解一下凯撒加密:

 在密码学中,凯撒密码(英语:Caesar cipher),或称凯撒加密、凯撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期凯撒的名字命名的,当年凯撒曾用此方法与其将军们进行联系。
 恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。恺撒密码还在现代的ROT13系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。

参考解题步骤

1、观察密文,afZ_r9VYfScOeO_UL^RWUc
由于密文中有下划线和阿拉伯数字,所以推测应该不是用的字母表进行的替换加密,很有可能是用的ASCII码表。
ASCII码表

2、由题目可知其格式为flag{ },所以我们可以从flagafZ_之间的对应关系找出规律。

密文 明文 变化规律
a (97) f (102) +5
f (102) l (108) +6
Z (90) a (97) +7
_ (95) g (103) +8

可以看出其偏移量是对每个字符:从第一个字符的偏移量为5,第二个字符的偏移量为6……第n个字符的偏移量为4+n。偏移量依次递增。

3、解密

Python版解密代码

ciphertext = 'afZ_r9VYfScOeO_UL^RWUc'
j = 5
for i in ciphertext:
    print(chr(ord(i) + j), end='')
    j += 1

java版解密代码

public class Caesar {
    public static void main(String[] args) {
        String ciphertext = "afZ_r9VYfScOeO_UL^RWUc";
        char[] plaintext = new char[ciphertext.length()];
        for(int i = 0; i < ciphertext.length(); i++){ //注意i是从0开始的,所以是5+i
            plaintext[i] = (char)(((int)ciphertext.charAt(i) + 5 + i) % 128);
        }
        for (char i: plaintext) {
            System.out.print(i);
        }
    }
}

结果
结果

4、提交答案flag{Caesar_variation}
提交答案
解题成功

发布了118 篇原创文章 · 获赞 479 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/y_universe/article/details/90376962