Crypto_BUUCTF_WriteUp | 大帝的密码武器

题目

下载附件得到一个不知道什么格式的文件名为 zip,于是强制更改后缀名解压缩得到两个 txt。

题目
公元前一百年,在罗马出生了一位对世界影响巨大的人物,他生前是罗马三巨头之一。他率先使用了一种简单的加密函,因此这种加密方法以他的名字命名。
以下密文被解开后可以获得一个有意义的单词:FRPHEVGL
你可以用这个相同的加密向量加密附件中的密文,作为答案进行提交。

密文:ComeChina

分析

罗马的密码大帝指的是凯撒,利用凯撒密码的原理对给出的密文单词进行循环移位

char s[] = "FRPHEVGL";
for (int i = 0; i < 26; ++i) {
	for (int j = 0; j < strlen(s); ++j) {
		++s[j];
		if (s[j] > 'Z') {
			s[j] -= 'Z' - 'A' + 1;
		}
	}
	printf("%d %s\n", i + 1, s);
}

得到 26 种字母组合:

01 GSQIFWHM 02 HTRJGXIN 03 IUSKHYJO 04 JVTLIZKP 05 KWUMJALQ 06 LXVNKBMR 07 MYWOLCNS
08 NZXPMDOT 09 OAYQNEPU 10 PBZROFQV 11 QCASPGRW 12 RDBTQHSX 13 SECURITY 14 TFDVSJUZ
15 UGEWTKVA 16 VHFXULWB 17 WIGYVMXC 18 XJHZWNYD 19 YKIAXOZE 20 ZLJBYPAF 21 AMKCZQBG
22 BNLDARCH 23 COMEBSDI 24 DPNFCTEJ 25 EQOGDUFK 26 FRPHEVGL

其中只有 SECURITY 是有意义的单词,即密钥为偏移量 13。

用该密钥对 ComeChina 进行加密,由于 ComeChina 包含大小写字母,故对得到的密文在大小写字母范围内取模。

char s[] = "ComeChina";
for (int i = 0; i < strlen(s); ++i) {
	s[i] += 13;
	if (s[i] > 'z') {
		s[i] -= 'z' - 'a' + 1;
	}
}
printf("%s", s);

得到密文套上格式即可提交。

Flag

flag{PbzrPuvan}

posted @ 2023-11-07 15:30  Guanz  阅读(152)  评论(0编辑  收藏  举报