Crypto_BUUCTF_WriteUp | 密码学的心声
题目
分析
试着唱了一下(bushi,发现歌词里的提示
- 简谱需要转为 ASCII 码
- 谱子里没有 8,且 8 与进制相关
根据第 2 点可猜测谱子为八进制。
对照 ASCII 码表,发现编码的范围在 0 到 127 之间,其中非控制功能的字符范围为 32 到 126,范围大小为 95。而 8 的 3 次方可将这个范围完全囊括,谱子里的数字共 63bit 正好整除,于是暂定分组大小为 3bit 一组。对分组后得到的字符由八进制转换为十进制,得到 21 个数字。
再看题目,要求的是“有意义语句通顺”的字符串,尝试将数字对照 ASCII 码转换为字符串,得到 flag 内容。
代码如下:
// 按每3位一个数划分 int nums[] = { 111,114,157,166,145,123,145,143,165,162,151,164,171,126,145,162,171,115,165,143,150 }; int numsSize = sizeof(nums) / sizeof(int); // 八进制转十进制 char* OctToDec = (char*)malloc(numsSize); memset(OctToDec, 0, numsSize); for (int i = 0; i < numsSize; ++i) { int p = 0; while (nums[i]) { OctToDec[i] += nums[i] % 10 * pow(8,p); nums[i] /= 10; ++p; } } for (int i = 0; i < numsSize; ++i) { printf("%c", OctToDec[i]); }
Flag
flag{ILoveSecurityVeryMuch}
参考
本文作者:Guanz
本文链接:https://www.cnblogs.com/Guanz/p/17813467.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
标签:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步