本文主要是介绍【CTF Crypto】XCTF GFSJ0523 Caesar Writeup(凯撒密码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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}
声明
本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行,并且严格遵守了相关法律法规。
博主坚决反对任何形式的非法黑客行为,包括但不限于未经授权的访问、攻击或破坏他人的计算机系统。博主强烈建议每位读者在学习网络攻防技术时,必须遵守法律法规,不得用于任何非法目的。对于因使用这些技术而导致的任何后果,博主不承担任何责任。
这篇关于【CTF Crypto】XCTF GFSJ0523 Caesar Writeup(凯撒密码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!