变异凯撒(实验吧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码表。
2、由题目可知其格式为flag{ }
,所以我们可以从flag
和afZ_
之间的对应关系找出规律。
密文 | 明文 | 变化规律 |
---|---|---|
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}
解题成功