加密解密程序实验报告

  • 格式:docx
  • 大小:1.17 MB
  • 文档页数:34

下载文档原格式

  / 34
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序设计实践

加密解密程序实验报告

课题概述

1.1课题目标和主要内容:

利用MFC类或者win32编写windows程序,实现加密解密的功能。

1.2系统的主要功能:

1.实现用户界面友好的操作。

2.具有对称编码体制,可以实现:

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系统程序流程图及设计:

设计功能,编

辑菜单栏

是否需要

设计相关

对话框?

是否

新建并设计

一个对话框

为该对话框添加

一个类,编写相应

的代码

在CView类中为菜单

栏编写相应的消息响

应函数。

运行,调试直到能够

实现设计的功能。

2.5模块划分图:

2.8类的关系图:

我们在编写加密解密程序时,主要使用了一下几个类:

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);