这是上年写的,直接开给大家了,大家一起学习分享吧~~~~~~
先看看效果
这个在简单的ctf中还是很有用的,http://blog.csdn.net/u012763794/article/details/50132513,我在这里用了好几次了
一切都是从简单做起的吧,不写简单的工具怎么写高大上的工具呢。
1.需要的基础
C++基础,MFC的基本编程
2.开发环境
vc++6.0,当然vs的各大版本和最新版也是没问题的
3.新建个工程
选择基本对话框就可以了
4.设计界面
新建个对话框
最重要的id一定要命名好,最后就只是后面不同,就1-26啦
跟着给解密按钮添加响应函数就可以啦
5.解密代码编写
下面的是解密按钮的响应函数
void CMoveDecryptDlg::OnButtonDecrypt()
{
// TODO: Add your control notification handler code here
char szWord[100];
GetDlgItem(IDC_EDIT_WORD)->GetWindowText(szWord, 100); //获取输入框的字符串
Decrypt(szWord);//调用解密函数
}
真正的解密代码
VOID CMoveDecryptDlg::Decrypt(char *szWord)
{
CString str;
int id;
for (int j = 1; j <= 25; j++)//1-25次移位
{
id = GetId(j-1);
for (int i = 0; i < strlen(szWord); i++)//根据字符串长度,依次移位,只处理大小写字母
{
if (szWord[i]>='a'&&szWord[i]<='z')//如果是小写字母
{
szWord[i] = (szWord[i] - 'a' + 1) % 26 +'a'; //szWord[i] - 'a'就是距离a的距离,+1就是每次循环移动一位,当然还要在26的范围内,最后还要加上a的ASCII码97,因为与a的距离再加97才能获得其最终的ASCII码
}else if (szWord[i]>='A'&&szWord[i]<='Z')//如果是大写字母
{
szWord[i] = (szWord[i] - 'A' + 1) % 26 +'A';//道理跟上面一样
}
}
str.Format("%s",szWord); //获取字符串并转化成Cstring
GetDlgItem(id)->SetWindowText(str); //放到对应的ID的框里
}
}
GetId代码(就是获取下面25个框的id)
int CMoveDecryptDlg::GetId(int num)
{
const DWORD MyIdcGroup[] = {
IDC_EDIT_DECRYPT1,
IDC_EDIT_DECRYPT2,
IDC_EDIT_DECRYPT3,
IDC_EDIT_DECRYPT4,
IDC_EDIT_DECRYPT5,
IDC_EDIT_DECRYPT6,
IDC_EDIT_DECRYPT7,
IDC_EDIT_DECRYPT8,
IDC_EDIT_DECRYPT9,
IDC_EDIT_DECRYPT10,
IDC_EDIT_DECRYPT11,
IDC_EDIT_DECRYPT12,
IDC_EDIT_DECRYPT13,
IDC_EDIT_DECRYPT14,
IDC_EDIT_DECRYPT15,
IDC_EDIT_DECRYPT16,
IDC_EDIT_DECRYPT17,
IDC_EDIT_DECRYPT18,
IDC_EDIT_DECRYPT19,
IDC_EDIT_DECRYPT20,
IDC_EDIT_DECRYPT21,
IDC_EDIT_DECRYPT22,
IDC_EDIT_DECRYPT23,
IDC_EDIT_DECRYPT24,
IDC_EDIT_DECRYPT25,
};
return MyIdcGroup[num];
}