目录
2.编译凯撒:afZ_r9VYfScOeO_UL^RWUc,要求解出相应的密文
仅供交流学习使用!!!
前言
仅供学习途中遇到类似问题的同学参考,因为自己有过乘他人阴,所以也想给有需要的人撑一把伞。
二、题目
1.缺损的hash
这里有一段丢失的sha1密文
89aa???0bfd7da1409???c8c76e0461aaf9?????
要求你还原出他的原值和hash值
已知线索 明文为: fl??{HELLO ?ORLD}
解题思路(仅供参考):
#编写python程序:
import hashlib
s="fl??{HELLO ?ORLD}"
for i in range(48,123): #在数字(48-57)和字母(65-90),(97-122)中查找
for j in range(48,123): #在数字(48-57)和字母(65-90),(97-122)中查找
for k in range(48,123): #在数字(48-57)和字母(65-90),(97-122)中查找
s='fl'+chr(i)+chr(j)+'{HELLO '+chr(k)+'ORLD}'
#用穷举法替换明文中的未知字符
jiami=hashlib.sha1(s.encode("utf-8")).hexdigest() #将字符串进行加密
#下面判断加密后的密文是否与题设匹配,这里不用考虑字符的先后顺序
#因为sha1生成的密文是散列值,一个字符的顺序变化就会导致整个密文发生改变
if '89aa' in jiami and '0bfd7da1409' in jiami and 'c8c76e0461aaf9' in jiami:
print("密文为",jiami)
print("明文为",s)
编译结果 :
获得flag为: flag{HELLO WORLD}
2.编译凯撒:afZ_r9VYfScOeO_UL^RWUc,要求解出相应的密文
格式:flag{ }
解题思路(仅供参考):
编写C++程序查找规律:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a="afZ_r9VYfScOeO_UL^RWUc";
string b="flag{";//已知字符
for(int i=0;i<5;i++) //基于已知字符进行比较
cout<<b[i]-a[i];//比较两个字符串,输出字符串中对应字符ASCII码的差值
}
编译运行:
找到规律!!!
编写C++程序转换字符:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a="afZ_r9VYfScOeO_UL^RWUc";
int n=a.size();//获得字符串长度
for(int i=0;i<n;i++)//遍历字符串
cout<<char(a[i]+i+5);//输出经过处理的字符
}
编译运行:
获得flag为:flag{Caesar_variation}
3.给出指定公钥文件,进行破解,求出密钥,要求用十进制表示
格式ctf{密钥}
解题思路(仅供参考):
利用kali打开公钥文件
利用工具对得到的d进行因式分解然后生成私钥
将私钥改为10进制
获得flag为:
Flag{406853230956379689450620815713768871010712825839536410687962650677800895818003893712259622281477453292088146173840036827322518131453630576229976208523593618949818777897059256426591560532784635697190752924923710375949616954069804342573867253630978123632384795587951365482103468722384133084798614863870775897915929475258974188300927376911833763105616386167881813301748585233563049693794370642976326692672223638908164822104832415788577945314264232531947860576966629150456995512932232264881080618006698700677529111454508900582785420549466798020451488168615035256292977390692401388790460066327347700109341639992159475755036449}
总结
本文基于大部分网络工程专业学生与计算机科学与技术专业都学习的一门课《网络攻防》,过程为老师引导,然后自己实操实现,过程难免会有不规范的地方,欢迎大佬们留言讨论!