加解密杂烩程序开发(一)

来源:互联网 发布:usb3.0端口 编辑:程序博客网 时间:2024/05/01 12:39

经常参加CTF比赛,于是也经常会碰到一些加解密的东西,于是自己写一个杂烩的程序,会比较方便。

目标:写一个常用的加解密程序,弥补JPK里加解密算法不全的缺点。

开发语言:鉴于Python对字符串处理和密码算法的强大支持,计划采用Python实现加解密;同时界面这块计划采用自己比较熟悉的MFC。
技术关键点:开发过程中碰到的一些技术关键点,主要有:
                    1)界面线程和工作线程的分离,同时界面程序和工作线程之间的参数传递;
                    2)vc如何调用Python程序,需要设置的点;
                    3)vc和python之间参数和返回值的传递;
开发过程:
-------------------------------华丽丽的分割线---------------------------------
1、开发环境是Microsoft Visual Studio 2010,新建一个MFC程序


应用程序类型选择“基于对话框”,其他无所谓,一直下一步到完成。


2、页面布局如图所示


3、为各控件和按钮添加响应函数,同时设置何种加解密算法的标志位m_Tag,响应函数类似:
void CdecryptDlg::OnBnClicked_UrlDecode()
{
     // TODO: 在此添加控件通知处理程序代码
     m_Tag = const_UrlDecode;
     m_EncryptStr = _T("这是一段测试代码。");
     m_DecryptStr = _T("%d5%e2%ca%c7%d2%bb%b6%ce%b2%e2%ca%d4%b4%fa%c2%eb%a1%a3");
     UpdateData(FALSE);
}
4、界面线程和工作线程的分离
为了避免出现程序界面假死的状况,这里采用新建工作线程的方式来处理。首先按钮响应函数新建一个线程,同时将当前对象的指针传递给该线程函数,用以传递对象内部的成员变量等。
void CdecryptDlg::OnBnClicked_Decrypt()
{
     // TODO: 在此添加控件通知处理程序代码
     HANDLE m_hAcceptThread;
     m_hAcceptThread = CreateThread(NULL,0,DecryptThread,this,CREATE_SUSPENDED,NULL);
     if(!m_hAcceptThread)
     {
          AfxMessageBox(_T("线程创建失败"),MB_OK|MB_ICONERROR);
          return;
     }
     ResumeThread(m_hAcceptThread);
}
然后新建一个static DWORD WINAPI类型的线程函数DecryptThread,该线程函数内部仅有一句代码,就是通过当前对象指针调用真正的工作函数
DWORD WINAPI CdecryptDlg::DecryptThread(void* pDecrypt)
{
     ((CdecryptDlg*)pDecrypt)->DecryptWork();
     return 0;
}
真正的工作函数其实是DecryptWork,因为它是当前类的成员函数,所以可以直接调用成员变量等参数。
void CdecryptDlg::DecryptWork(void)
{
.....
}

【未完待续】

0 0
原创粉丝点击