程序设计实践
加密解密程序实验报告
课题概述
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小时内删除。
发表评论