[XCTF][简单] 凯撒大帝在培根里藏了什么(难度1)

博客围绕题目“凯撒大帝在培根里藏了什么”展开解题。下载的txt文件中有AB串,先通过CTF在线工具将AB串用培根密码解密,得到一串字符,再用凯撒密码解密,最终得出Flag为flag{havefunwithcrypto},解题无陷阱,确定密码类型即可。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、题目

二、解题过程

1.AB串?必然是什么某种密码

2.凯撒密码

总结

前言

题目名“凯撒大帝在培根里藏了什么”,暗示的很明显了~。凯撒密码,培根密码。


一、题目

下载得到一个txt文件,里面是一串AB。

ABBABAABBAAAAABABABAABABBAAAAABAABBAAABAABBBABBAABABBABABAAABABBBAABAABABABBBAABBABAA 

二、解题过程

1.AB串?必然是什么某种密码

虽然我对培根密码一无所知,连名字都是在某个集成各种类型密码加密解密的网站中瞟到的。

加密时,明文中的每个字母都会转换成一组五个英文字母。其转换依靠下表:

A/a

aaaaa

H/h

aabbb

O/o

abbba

V/v

babab

B/b

aaaab

I/i

abaaa

P/p

abbbb

W/w

babba

C/c

aaaba

J/j

abaab

Q/q

baaaa

X/x

babbb

D/d

aaabb

K/k

ababa

R/r

baaab

Y/y

bbaaa

E/e

aabaa

L/l

ababb

S/s

baaba

Z/z

bbaab

F/f

aabab

M/m

abbaa

T/t

baabb

G/g

aabba

N/n

abbab

U/u

babaa

加密者需使用两种不同字体,分别代表A和B。准备好一篇包含相同AB字数的假信息后,按照密文格式化假信息,即依密文中每个字母是A还是B分别套用两种字体。

解密时,将上述方法倒转。所有字体一转回A,字体二转回B,以后再按上表拼回字母

法兰西斯·培根另外准备了一种方法,其将大小写分别看作A与B,可用于无法使用不同字体的场合(例如只能处理纯文本时)。但这样比起字体不同更容易被看出来,而且和语言对大小写的要求也不太兼容。

培根密码本质上是将二进制信息通过样式的区别,加在了正常书写之上。培根密码所包含的信息可以和用于承载其的文章完全无关。

                                       —— 摘自培根密码_百度百科

直接将上述AB串交给CTF在线工具-在线培根密码加密|在线培根密码解密|培根密码算法|Baconian Cipher

得到这样一串东西:ngbklatcoznixevzu

2.凯撒密码

同样交给

CTF在线工具-在线凯撒密码加密|在线凯撒密码解密|凯撒密码算法|Caesar Cipher

咦,这解出来一个有语义的东西~~~

最终的Flag:flag{havefunwithcrypto}


总结

这个还是很友好的,从题目的名字就知道了大致的努力方向,而且也没有什么陷阱,只是加解密而已,直到密码类型,就很好办。

凯撒大帝加密术是一种简单的替换式密码技术,也称为移位密码。它通过将明文中的每个字母按照固定的字母表顺序向后移动固定的位置来加密。在C语言中实现凯撒大帝加密的基本步骤如下: 1. 定义一个函数,接受输入字符串、加密位数作为参数。 2. 遍历输入字符串中的每个字符,区分字母和非字母字符。 3. 对于字母,根据给定的位数将其转换成小写字母并进行循环右移(如果超过 'z' 则从'a'开始计数)。 4. 将处理后的字符添加到结果字符串中,非字母字符保持原样。 5. 返回加密后的字符串。 下面是一个简单的C语言示例: ```c #include <stdio.h> #include <ctype.h> char caesar_cipher(char c, int shift) { if (isalpha(c)) { if (c >= 'a' && c <= 'z') { return ((c - 'a' + shift) % 26) + 'a'; } else if (c >= 'A' && c <= 'Z') { return ((c - 'A' + shift) % 26) + 'A'; } } return c; } void encrypt_cesar(const char *plaintext, int shift, char *ciphertext) { for (int i = 0; plaintext[i] != '\0'; i++) { ciphertext[i] = caesar_cipher(plaintext[i], shift); } ciphertext[i] = '\0'; // 添加终止符 } int main() { char plaintext[] = "Hello, World!"; char ciphertext[100]; int shift = 3; // 加密位数 encrypt_cesar(plaintext, shift, ciphertext); printf("Original text: %s\n", plaintext); printf("Encrypted text: %s\n", ciphertext); return 0; } ``` 当你运行这个程序时,它会将`plaintext`中的文本按位数`shift`加密,并打印出原始和加密后的字符串。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值