程序设计实践
加密解密程序实验报告
      课题概述
1.1课题目标和主要内容:
利用MFC类或者win32编写windows程序,实现加密解密的功能
1.2系统的主要功能:
1.实现用户界面友好的操作。
2.具有对称编码体制cipher命令现
i.凯撒密码:能够自定义密钥,自由输入明文,进行加密、解密在对话框中返回加密和解密后的内容
ii.置换密码:能够自定义密钥,自由输入明文,经矩阵变换进行加密、解密在对话框中返回加密和解密后的内容
iii.对称加密DES:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序加密,解密结果
3.具有非对称编码体制:
i.  RSA加密解密随机产生p,q,经检验是否互质,若不互质接着产生两个随机数,直到二者互质为止。自动生成p,q,N加密解密的密钥,可以自由输入明文,返回加密、解密的
内容。
ii.  MD5消息摘要计算:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序加密结果
4.信息隐藏技术:
用LSB在图片(bmp格式任意位置的图片)写入信息,读取信息并显示出来可以擦除信息。可以自定义密钥。
5.    AES加密解密:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序加密,解密结果
6.    以上的所有文字加密解密方法(除LSB以外其余所有方法)都可以用于文件加密,解密,并能够及时保存加密,解密的信息到一个TXT文档,可以存在用户存放的地方。
7.更多:
链接了一个可加密解密,功能更为齐全的网站,若是上述方法不能满足用户需求,可以在程序运行的窗口中点击相应按钮,在联网的条件下进行在线加密解密。
一、系统设计
2.1系统总体框架:
构思功能,设计用户友好界面
2.2主要的层次逻辑为:
1.界面窗口
改善设计修正效果图:
2.将书上C++语言改用MFC适应的进行编程实现相功能:
                              凯撒加解密
3.或者用系统函数调用WIN32编好的程序:
4.进行文件操作,加密解密后保存文件。
6.调用函数实现网页链接:
2.3设计思想:
(1)新建一个基于单文档的MFC应用程序,工程名称为secret
(2)编辑菜单栏,添加可以实现的功能为实现功能建立并设计所需要的对话框,并建立相应的类也要对话框中的编辑栏添加相应的成员变量根据算法设计来定value还是control类别为它们取好名字,合适的变量型,例如
在我的程序里,我把密钥和明文一般定义为control类别,CEDIT类型密文CEDIT也有CString类型。这样可以方便实现编辑栏中输入信息传给程序,再通过相应的还是进行一番调整后返回信息。
对话框中也还会有些BUTTON,要为他们添加消息响应函数实现操作
为了自己方便起见,可以把对话框菜单中相应项的ID改为自己能辨别出来作用的
(3)如有需要可以在Csecretview类中添加,显示对话框。
void CsecretView::Oncaser()
{
    // TODO:  在此添加命令处理程序代码
    mycaesar my_dlg;
    my_dlg.DoModal();
}
直接MFC程序中编写的操作,相关类如下。
2.4系统程序流程图及设计:
否u
2.5模块划分图
2.8类的关系图:
CMainFrame类
CView类
我们在编写加密解密程序,主要使用了一下几个类:
C…DOC类类
C…APP类类
CDLG类类
2.7存储结构及内存分配:
存储结构:主要使用数组、指针存储密钥,明文,密文并对它们进行操作。
        在DES,MD5等算法中一开始就需要存储矩阵等大量信息,在加密解密是也会占据内存MD5占用的内存较大。
2.8关键算法分析:
1. 凯撒密码的实现:
    [1]算法功能:输入密钥与明文,用for循环实现位移。从而加密,解密。
[2]算法基本思想:
需要将书上的C++语言转化为MFC适应的语言,如cout,cin都通过添加成员变量由对话框上的操作来实现。
[3]   算法时间复杂度为O(1);空间复杂度为O(1);(由数组长度限制了输入密等长度,故而不为O(n))
[4]其关键代码如下:
void mycaesar::Oncode()
{
   
    // TODO:  在此添加控件通知处理程序代码
    UpdateData(TRUE);
    char s[100];
    CString c;
    SendDlgItemMessage(IDC_EDIT2, WM_GETTEXT, 100, (LPARAM)s);
    c = s;
    for (int i = 0;i<=100; i++)
    {
        if (s[i] >= 'a'&& s[i] <= 'z')
            s[i] = ((int)(s[i] - 'a') + key) % 26 + 'a';
        else if (s[i] >= 'A'&& s[i] <= 'Z')
            s[i] = ((int)(s[i] - 'A') + key) % 26 + 'A';
    }
   
    SendDlgItemMessage(IDC_EDIT3, WM_SETTEXT, 100, (LPARAM)s);
    SendDlgItemMessage(IDC_EDIT3, EM_SETSEL, 0, -1);
    UpdateData(FALSE);
}
void mycaesar::Ondecode() //解密算法实现
{
    // TODO: Add your control notification handler code here

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。