XCTF2016 类似培根
来源:互联网 发布:decode函数在sql种用法 编辑:程序博客网 时间:2024/06/11 18:42
这不是培根,也许是香肠吧~
fIND PasswoRd:
fIrSt tHiNk OF thE PErSon wHo liVEs In diSguIse,
Who deals in SEcretS and tellS naUght But lIEs.
NExt, Tell Me whAT'S Always The LaSt tHiNg TO meND,ThE midDle oF MiDdle And End Of the end?
anD FinalLy give me The SounD oftEN hEArd DuriNg thE SEArch foR a hArD-to-FiNd WOrk.
NOW sTrinG theM ToGethEr, aNd aNswer me thiS,
Which Creature WouLd yoU be uNWiLLinG to kIss?
Writeup:
以前写的培根密码代码直接拿来用,
我写的这个只能读一行,用converter处理一下数据,保留字母,得到
fINDPasswoRdfIrSttHiNkOFthEPErSonwHoliVEsIndiSguIseWhodealsinSEcretSandtellSnaUghtButlIEsNExtTellMewhATSAlwaysTheLaSttHiNgTOmeNDThEmidDleoFMiDdleAndEndOftheendanDFinalLygivemeTheSounDoftENhEArdDuriNgthESEArchfoRahArDtoFiNdWOrkNOWsTrinGtheMToGethEraNdaNswermethiSWhichCreatureWouLdyoUbeuNWiLLinGtokIss
在程序里跑一遍
//培根密码 3合1#include <iostream>#include <string.h>#include <string>#include <ctype.h>using namespace std;string graph1[26] = {"aaaaa", "aaaab", "aaaba", "aaabb", "aabaa","aabab", "aabba", "aabbb", "abaaa", "abaab","ababa", "ababb", "abbaa", "abbab", "abbba","abbbb", "baaaa", "baaab", "baaba", "baabb","babaa", "babab", "babba", "babbb", "bbaaa", "bbaab"};string graph2[26] = {"AAAAA", "AAAAB", "AAABA", "AAABB", "AABAA","AABAB", "AABBA", "AABBB", "ABAAA", "ABAAA","ABAAB", "ABABA", "ABABB", "ABBAA", "ABBAB","ABBBA", "ABBBB", "BAAAA", "BAAAB", "BAABA","BAABB", "BAABB", "BABAA", "BABAB", "BABBA", "BABBB"};int main(){char a[1000], aa[1000]; string b, c, d;cout << "请输入密文:" << endl;gets_s(a);for (int i = 0; i<strlen(a); i++){if (islower(a[i]))b += 'b';else if (isupper(a[i]))b += 'a';}if (b.length() % 5 != 0){cout << "This string is not a Bacon's cipher." << endl;return 0;}for (int i = 0; i<b.length(); i++){c += b[i];if ((i + 1) % 5 == 0)for (int k = 0; k<26; k++)if (c == graph1[k]){d += 'A' + k, c = ""; break;}}cout << "培根加密第一种:" << d << endl;b = c = d = "";for (int i = 0; i<strlen(a); i++){if (islower(a[i]))b += 'B';else if (isupper(a[i]))b += 'A';}for (int i = 0; i<b.length(); i++){c += b[i];if ((i + 1) % 5 == 0)for (int k = 0; k<26; k++)if (c == graph2[k]){d += 'a' + k, c = ""; break;}}cout << "培根加密第二种:" << d << endl;b = c = d = "";for (int i = 0; i<strlen(a); i++){if (a[i] == 'A')b += 'B';else if (a[i] == 'B')b += 'A';}for (int i = 0; i<b.length(); i++){c += b[i];if ((i + 1) % 5 == 0)for (int k = 0; k<26; k++)if (c == graph2[k]){d += 'a' + k, c = ""; break;}}cout << "培根加密第三种:" << d << endl;system("pause");return 0;}
结果只出了一个Q,显然不对,总共375个字母,对应75个字母
然后我看了一下过程中变量c的值,它出现了bbbbb,无法对应数组里面的数据,所以导致继续累加,
for (int i = 0; i<b.length(); i++){c += b[i];if ((i + 1) % 5 == 0)for (int k = 0; k<26; k++)if (c == graph1[k]){d += 'A' + k, c = ""; break;}}
而培根表里没有bbbbb,就猜测出题人把ab倒换,随即改了一下代码:
for (int i = 0; i<strlen(a); i++){if (islower(a[i]))b += 'a';else if (isupper(a[i]))b += 'b';}
重新跑一遍,得到flag
改成小写提交ac
- XCTF2016 类似培根
- 培根密码
- 培根密码
- [016]培根虾卷
- 关于读书(培根)
- 论读书 培根
- [摘要]培根哲学
- 论愤怒 作者:培根
- 《论读书》 培根
- 《论逆境》培根
- 《论嫉妒》培根
- 《论幸运》培根
- 培根密码加解密
- 培根-论学习
- 我喜欢培根:
- 我喜欢培根
- 论读书——培根
- 论读书 ——培根
- 控制器View的生命周期
- 大数据与云计算笔记[一]:云计算相关概念
- 最小的N个和
- Android Studio平台如何在Android 6.0中继续支持Apache HttpClient
- (三)3面向对象思想和lseek
- XCTF2016 类似培根
- 第三周项目1-顺序表的基本运算
- 100天土鸡饲养计划(50)
- 3-5 学生成绩统计
- String类的一些方法
- CDialogBar中按钮为灰色不可用的解决办法
- hdu 5889----最短路+最小割
- /dev/null的含义
- MongoDB基础部分及实现(一)