用MFC打造你的的移位密码解密器

这是上年写的,直接开给大家了,大家一起学习分享吧~~~~~~
先看看效果


这个在简单的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];
}


原文地址:https://www.cnblogs.com/cnsec/p/13286542.html