BUUCTF_Crypto_WriteUp | 大帝的密码武器

发布时间 2023-11-07 15:36:38作者: Guanz

题目

下载附件得到一个不知道什么格式的文件名为 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 种字母组合:

1 GSQIFWHM 2 HTRJGXIN 3 IUSKHYJO 4 JVTLIZKP 5 KWUMJALQ 6 LXVNKBMR
7 MYWOLCNS 8 NZXPMDOT 9 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}