【CTF Crypto】XCTF GFSJ0523 Caesar Writeup(凯撒密码)

发布于:2024-05-05 ⋅ 阅读:(33) ⋅ 点赞:(0)

Caesar

你成功的解出了来了灯谜,小鱼一脸的意想不到“没想到你懂得这么多啊!” 你心里面有点小得意,“那可不是,论学习我没你成绩好轮别的我知道的可不比你少,走我们去看看下一个” 你们继续走,看到前面也是热热闹闹的,同样的大红灯笼高高挂起,旁边呢好多人叽叽喳喳说个不停。你一看 大灯笼,上面还是一对字符,你正冥思苦想呢,小鱼神秘一笑,对你说道,我知道这个的答案是什么了


原理

凯撒密码(Caesar cipher)是一种替换式加密算法,也是最简单、最广为人知的加密技术之一。它是由罗马的统治者凯撒(Julius Caesar)所发明,因此得名。

在凯撒密码中,加密的方式是将明文中的每一个字符都向后(或者向前)按照字母表顺序移动固定的位数,从而得到密文。例如,如果位移是2,那么A就会被替换为C,B会被替换为D,以此类推。同样,解密的过程就是将密文中的每一个字符都向前(或者向后)按照字母表顺序移动固定的位数,从而得到明文。

解法

oknqdbqmoq{kag_tmhq_xqmdzqp_omqemd_qzodkbfuaz}

flag 格式为 cyberpeace{xxxxxxxxxx}。已知第一位应该是 c,但是变成了 o。

可以写个程序转换一下。

#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;

int main() {
	int offset;
	char ch;
	string src, dst;

	cin >> src >> ch;

	dst = "";
	offset = src[0] - (isupper(src[0]) ? 'A' : 'a');
	for (auto i : src) {
		if (!isalpha(i)) {
			dst += i;
			continue;
		}
		char base = (isupper(i) ? 'A' : 'a');
		dst += (i - base + offset) % 26 + base;
	}
	cout << dst << endl;
	return 0;
}

输入:

oknqdbqmoq{kag_tmhq_xqmdzqp_omqemd_qzodkbfuaz}
c

输出:

cyberpeace{you_have_learned_caesar_encryption}

Flag

cyberpeace{you_have_learned_caesar_encryption}

声明

本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行,并且严格遵守了相关法律法规

博主坚决反对任何形式的非法黑客行为,包括但不限于未经授权的访问、攻击或破坏他人的计算机系统。博主强烈建议每位读者在学习网络攻防技术时,必须遵守法律法规不得用于任何非法目的。对于因使用这些技术而导致的任何后果,博主不承担任何责任