云南大学软件学院数据结构实验三实验报告——文件加密译码器
实验2-非对称加密实验报告
云南大学软件学院实验报告课程:信息安全学实验学期:2012-2013学年第二学期任课教师:金鑫专业:学号:姓名:成绩:实验2-非对称加密实验一、实验目的了解非对称密码的加密和解密特点,理解加密解密与数字签名的基本原理,掌握PGP加密的原理,使用PGP加密软件加密信息。
二、实验原理公钥和私钥是互补的,就是说用公匙加密的密文可以用私匙解密,反过来也一样。
假设甲要寄信给乙,他们互相知道对方的公匙。
甲就用乙的公匙加密邮件寄出,乙收到后就可以用自己的私匙解密出甲的原文。
由于没别人知道乙的私匙所以即使是甲本人也无法解密那封信,这就解决了信件保密的问题。
另一方面由于每个人都知道乙的公匙,他们都可以给乙发信,那么乙就无法确信是不是甲的来信。
认证的问题就出现了,这时候数字签名就有用了。
甲用自己的私匙加密,附加在邮件上,再用乙的公匙将整个邮件加密。
这样这份密文被乙收到以后,乙用自己的私匙将邮件解密,得到甲的原文和签名,乙的PGP也从原文计算出一个结果与甲的公匙解密签名得到的数比较,如果符合就说明这份邮件确实是甲寄来的。
三、实验步骤1、安装PGP软件,用PGP加密、解密文件密钥加密口令加密解密口令解密2、发送PGP加密和签名后的电子邮件并解密邮件将要发送的文件添加到PGP压缩包对文件进行加密输入邮件地址签名保存生成加密后的PGP文件将加密后的PGP文件发送给搭档对方收到邮件收到的PGP文件解密后得到原文件解密后的文件可以打开并还原,如果密钥不配对打开将是乱码。
四、回答问题1)简要阐述加密解密与数字签名的原理和异同数字签名和数字加密的过程虽然都使用公开密钥体系,但实现的过程正好相反,使用的密钥对也不同。
数字签名使用的是发送方的密钥对,发送方用自己的私有密钥进行加密,接收方用发送方的公开密钥进行解密,这是一个一对多的关系,任何拥有发送方公开密钥的人都可以验证数字签名的正确性。
数字加密则使用的是接收方的密钥对,这是多对一的关系,任何知道接收方公开密钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私有密钥的人才能对信息解密。
云大软件工程实验三 软件设计
云大软件工程实验三软件设计云大软件工程实验三软件设计1.引言1.1 目的1.2 背景1.3 定义、缩略词和首字母缩略词的解释2.需求分析2.1 功能需求2.1.1 功能12.1.2 功能22.1.32.2 非功能需求2.2.1 性能需求2.2.2 可靠性需求2.2.3 安全性需求2.2.43.概要设计3.1 架构设计3.1.1 客户端-服务器架构3.1.2 分层架构3.1.33.2 模块划分3.2.1 模块13.2.2 模块23.2.33.3 接口设计3.3.1 外部接口3.3.2 内部接口3.3.33.4 数据库设计3.4.1 数据库结构3.4.2 数据库表设计3.4.34.详细设计4.1 模块1设计4.1.1 子模块1.1设计 4.1.2 子模块1.2设计 4.1.34.2 模块2设计4.2.1 子模块2.1设计 4.2.2 子模块2.2设计4.2.35.测试计划5.1 功能测试5.1.1 功能1测试用例 5.1.2 功能2测试用例 5.1.35.2 性能测试5.2.1 性能指标5.2.2 性能测试用例5.2.35.3 安全性测试5.3.1 安全漏洞测试用例5.3.2 安全性能测试用例5.3.36.上线计划6.1 部署步骤6.1.1 部署环境准备6.1.2 代码6.1.36.2 回滚计划6.3 验收标准附件:附件一:需求说明书附件二:设计图纸附件三:测试用例法律名词及注释:1.版权:对作品(例如文学、音乐、软件等)所赋予的法律上的保护,使其著作权人能够授权他人使用或复制作品。
2.专利:对发明的新技术、产品或方法的法律保护,使其专利持有人拥有独占使用或制造的权利。
3.商标:能够识别品牌或企业的标志、名称、符号或设计的法律保护,使其商标持有人能够独占使用。
4.涉密信息:指涉及国家安全、经济安全、社会公共利益和个人隐私安全等方面的机密信息。
文件加密的实验报告
一、实验目的1. 理解文件加密的基本原理和重要性。
2. 掌握使用加密工具对文件进行加密和解密的方法。
3. 提高对数据安全性的认识和实际操作能力。
二、实验环境1. 操作系统:Windows 102. 加密工具:TrueCrypt3. 实验材料:待加密文件(如文档、图片等)三、实验内容1. 理论学习(1)文件加密的基本原理:文件加密是通过将原始文件内容进行转换,使得只有拥有正确密钥的人才能解密还原原始文件的过程。
(2)加密算法:常见的加密算法有AES、DES、RSA等,其中AES加密算法因其安全性高、速度快而被广泛应用。
2. 实验步骤(1)准备实验材料:选择一个待加密的文件,如Word文档、图片等。
(2)安装TrueCrypt软件:从官方网站下载TrueCrypt软件,安装并运行。
(3)创建加密文件容器:在TrueCrypt软件中,点击“创建容器”,选择“标准TrueCrypt容器”作为加密方式,设置容器大小和加密算法。
(4)将文件放入加密容器:将待加密的文件拖拽到加密容器中,此时文件将被自动加密。
(5)保存加密文件:将加密后的文件保存到安全位置。
(6)解密文件:在TrueCrypt软件中,选择加密文件容器,输入密码,点击“打开容器”,即可解密文件。
3. 实验结果(1)加密文件:实验成功将待加密文件加密,并生成了加密文件容器。
(2)解密文件:使用正确密码成功解密加密文件,验证了加密和解密过程的有效性。
四、实验分析1. 文件加密的重要性(1)保护隐私:加密文件可以有效防止他人未经授权访问和篡改文件内容,保护个人隐私。
(2)数据安全:在数据传输过程中,加密文件可以防止数据被截获和篡改,提高数据安全性。
(3)合规要求:某些行业或组织对数据安全有严格要求,加密文件可以帮助企业或个人满足合规要求。
2. TrueCrypt加密工具的特点(1)免费:TrueCrypt是一款免费的开源加密软件,用户可以免费下载和使用。
云南大学软件学院报告
课程:数据结构实验学期:2014-2015学年第一学期任课教师:专业:信息安全学号:姓名:成绩:实验5 图基础实验一、实验目的1.掌握图的存储结构及其遍历。
二、实验软硬件环境(CPU、OS、IDE):三、实验任务(要求写出核心代码,并对运行结果截图)1)使用邻接矩阵和邻接表储表示分别实现如下给定的图1、图2、图3所示图的物理存储结构。
2)在1)所建立的图形存储结构上分别实现深度优先搜索遍历和广度优先搜索遍历,并给出遍历结果(序列)。
图3 有向图实验代码:#include<stdio.h>#include<stdlib.h>#define MAXVEX 20#define OK 1#define ERROR 0#define OVERFLOW -1#define INFINITY 65535#define QueueSize 20 //队列中最大元素个数typedef int QElemType; //队列的元素的类型typedef int VertexType;typedef int EdgeType;typedef enum{False,True}Boolean; //Boolean是布尔类型,其值是ture或false Boolean visited[MAXVEX]; //访问标志的数组。
typedef struct{VertexType vexs[MAXVEX];EdgeType arc[MAXVEX][MAXVEX];int numVertexes,numEdges;} MGraph; //邻接矩阵。
typedef struct EdgeNode //边表结点。
{int adjvex;struct EdgeNode *next;}EdgeNode;typedef struct VertexNode //顶点表结点。
{int data;EdgeNode *firstedge;}VertexNode,AdjList[MAXVEX];typedef struct{AdjList adjlist;int numVertexes,numEdges; //图中当前顶点数边数。
云南大学 件学院 计网实验3
云南大学软件学院实验报告课程:计算机网络原理实验任课教师:姓名:学号:专业:成绩:实验三、套接字编程1.实验目的:两人一组,编写一个客户端、服务器程序,掌握Socket编程原理。
2.实验环境:连入局域网络的主机一台。
3.实验指导:Socket API是实现进程间通信的一种编程设施,也是一种为进程间提供底层抽象的机制。
理解socket编程模型及其原理。
4.实验分析,回答下列问题。
a.运行指导书中的程序,并修改服务器的功能(自己思考),改写成多线程web服务器(选作),附上源代码,并加关键代码注释。
b.给出程序调试和运行的截图。
c.回答下列问题:(1)为什么在服务器和客户端要包含winsock2.h文件?winsock2.h是头文件,声明了在C/C++下进行Winsock编程需要的函数,结构等内容.是提供给编译器用的。
以此来提供自带程序库。
.(2)为什么在服务器和客户端程序中要加入#pragma comment(lib,"ws2_32.lib") 语句,如果不加会出现什么问题?表示链接Ws2_32.lib这个库,否则就无法使用Ws2_32.lib库(3)为什么在服务器和客户端程序中要使用WSAStartup函数,如果不用程序会有什么问题?当调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。
以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。
如果不调用就无法完成上述功能。
(4)如果服务器程序中没有memset(server.sin_zero, 0,sizeof(server.sin_zero));语句,程序会出现什么错误,为什么?不能够读出内容,因为删除该句话之后不能够分配内存空间来存储内容。
(5)如果先运行客户端程序,程序会有什么现象,为什么会有这一现象?终止访问,客户端会自动关闭程序,因为其请求未接收到有服务器端的回应。
云南大学 软件学院 数据库实验3
云南大学软件学院实验报告课程:数据库原理与实用技术实验学期:2011-2012学年第二学期任课教师:专业:学号:姓名:成绩:实验3使用SQL语句创建并管理数据库、数据表一、实验目的掌握查询分析器的使用方法。
掌握T-SQL语句的基本使用。
熟练掌握DDL语句。
熟练掌握DML(Insert, Delete, Update)语句。
二、实验内容1、用T-SQL语句创建并管理数据库“Employee数据库”,数据库要求见实验二。
记录创建数据库的SQL语句。
2、修改数据库:将“Employee数据库”的数据库最大容量更改为无限制(UNLIMITED),然后将“Employee数据库”的日志文件增长方式改为2MB。
记录SQL语句。
3、用T-SQL语句在“Employee数据库”创建数据表,数据表的结构见实验二。
记录创建表的SQL 语句。
4、修改表结构:将雇员信息表person中,Prof的字段长度改为15。
记录SQL语句。
5、向表中添加记录,使用Insert Into 语句分别向四张表中添加符合表结构属性的数据记录,要求每张表至少4条记录,并显示所添加的记录数据。
6、向雇员信息表person中添加记录完成如下操作:(1)、修改表中记录:将“王辉”的部门修改为“003”;(2)、删除记录:删除表中性别为“女”的员工记录;(3)、删除表:将“person”从“Employee数据库”中删除。
三、思考题如数据库表中存在如下记录:表person中的数据现执行:DELETE FROM department WHERE Depton=“001”,执行结果如何?为什么?。
文本加密程序实验报告
#### 一、实验背景随着互联网的普及和信息技术的飞速发展,数据安全成为了一个日益重要的问题。
为了保护用户的隐私和信息安全,文本加密技术得到了广泛的应用。
本实验旨在通过实现一个简单的文本加密程序,加深对加密算法的理解和应用。
#### 二、实验目的1. 理解基本的加密算法原理。
2. 掌握加密和解密程序的设计与实现。
3. 评估加密算法的安全性。
#### 三、实验内容本实验采用Python编程语言,实现了以下功能:1. 使用AES加密算法对文本进行加密和解密。
2. 实现一个简单的密钥管理功能。
3. 对加密和解密后的文本进行验证。
#### 四、实验步骤1. 导入所需库```pythonfrom Crypto.Cipher import AESfrom Crypto.Util.Padding import pad, unpadfrom Crypto.Random import get_random_bytes```2. 定义密钥生成函数```pythondef generate_key():return get_random_bytes(16) # AES密钥长度为16字节```3. 定义加密函数```pythondef encrypt(text, key):cipher = AES.new(key, AES.MODE_CBC)ct_bytes = cipher.encrypt(pad(text.encode('utf-8'), AES.block_size)) iv = cipher.ivreturn iv + ct_bytes```4. 定义解密函数```pythondef decrypt(ct, key):iv = ct[:16]ct = ct[16:]cipher = AES.new(key, AES.MODE_CBC, iv)pt = unpad(cipher.decrypt(ct), AES.block_size).decode('utf-8')return pt```5. 定义主函数```pythondef main():key = generate_key()print("生成的密钥:", key.hex())text = input("请输入要加密的文本:")encrypted_text = encrypt(text, key)print("加密后的文本:", encrypted_text.hex())decrypted_text = decrypt(encrypted_text, key)print("解密后的文本:", decrypted_text)```6. 运行程序```pythonif __name__ == "__main__":main()```#### 五、实验结果与分析1. 密钥生成实验中,我们使用了`get_random_bytes`函数生成一个随机的密钥,确保每次加密过程使用的密钥都是唯一的。
云大软件工程实验三 软件设计
云大软件工程实验三软件设计在软件工程的学习中,实验是帮助我们深入理解理论知识、掌握实际操作技能的重要环节。
实验三的软件设计,更是让我们亲身体验了从需求分析到架构搭建的整个过程,这不仅考验了我们的专业知识,也锻炼了我们的逻辑思维和创新能力。
软件设计,简单来说,就是根据用户的需求,确定软件系统的整体结构、模块划分、数据结构、算法流程等。
它就像是为一座即将建造的大楼绘制蓝图,只有设计得合理、完善,后续的施工(编码)才能顺利进行,最终建成的大楼(软件系统)才能坚固、美观、实用。
在本次实验中,我们首先进行了需求分析。
需求分析是软件设计的基础,就如同盖房子前要明确房子的用途、居住人数、功能需求等。
我们通过与用户的沟通、对业务流程的了解,收集了大量的需求信息,并对其进行整理、分类和优先级排序。
这其中,要特别注意需求的明确性和完整性,避免模糊不清或者遗漏重要需求,否则后续的设计和开发工作将会陷入困境。
接下来是总体设计。
在这个阶段,我们要确定软件系统的整体架构,比如是采用 C/S 架构还是 B/S 架构,是分层架构还是微服务架构等。
同时,还要划分出各个模块,并明确它们之间的关系。
这就像是把大楼划分成不同的区域,如客厅、卧室、厨房等,并确定它们之间的通道和连接方式。
在进行总体设计时,要充分考虑系统的可扩展性、可维护性和性能等方面的要求。
然后是详细设计。
详细设计是对总体设计的进一步细化,包括每个模块的内部结构、算法流程、数据结构、接口定义等。
这就好比是为每个房间确定具体的布局、装修风格、家具摆放等。
详细设计的好坏直接影响到代码的编写质量和效率,因此需要我们非常仔细和认真地对待。
在软件设计过程中,有几个关键的原则需要遵循。
首先是高内聚低耦合原则。
高内聚意味着一个模块内部的各个元素之间联系紧密,共同完成一个明确的功能;低耦合则表示模块之间的依赖关系尽量少,这样当一个模块发生变化时,对其他模块的影响最小。
其次是开闭原则,即软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
云南大学软件学院J2EE实验3
云南大学软件学院J2EE 实验报告姓名:学号:班级:日期:成绩:Lab 3 - Sharing Techniques一、实验目的1、进一步熟悉如何使用Eclipse开发Web应用;2、掌握不同页面间共享数据的四种方法:sendRidrect()、session、cookie和隐藏表单;3、理解sendRidrect()的交互流程;4、掌握使用session共享数据的方法;4、掌握HttpSession对象的相关知识;5、掌握使用cookie共享数据的方法;6、掌握HttpCookie对象的相关知识;。
二、实验步骤1、使用Eclipse建立Dynamic Web Project项目,命名为LoginV1.1;2、重构LoginV1的LoginCheck.java,使用sendRidrect()方法传递用户名和密码给LoginV1的Welcome.java;3、使用Eclipse建立Dynamic Web Project项目,命名为LoginV1.2;4、重构LoginV1.1的LoginCheck.java和Welcome.java文件,防止非法用户登录;5、开发SessionTest1和SessionTest2测试session对象;6、使用Eclipse建立Dynamic Web Project项目,命名为LoginV1.3;7、重构LoginV1.2的LoginCheck.java和Welcome.java文件,将用户信息放入session中;8、启动Tomcat,进行测试。
三、框架图1、LoginV1.1的框架图2、LoginV1.2的框架图2、LoginV1.3的框架图四、主要代码LoginV1.1的LoginCheck.java主要代码LoginV1.1的Welcome.java主要代码LoginV1.2的LoginCheck.java主要代码LoginV1.2的Welcome.javaLoginV1.3的LoginCheck.java的主要代码LoginV1.3的Welcome.java的主要代码LoginV1.3的Login.java的主要代码五、实验结果LoginV1.1登陆LoginV1.1登陆成功LoginV1.2登陆LoginV1.2登陆成功LoginV1.3的登陆成功LoginV1.3的Welcome页面点击返回登陆,取得session中的用户名和密码,并填到登陆输入框六、实验总结本次实验主要是对session进行了初步的了解和使用,了解了session在网站建设中的作用。
云南大学软件学院数据结构实验
实验难度: A □ B □ C □学期:2017秋季学期任课教师: 刘宇实验题目:组员及组长:承担工作:联系电话:电子邮件:完成提交时间:2017年10月24日一、【实验构思(Conceive)】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析)实验要求制作一个复数计算器,要求能进行实数和虚数的混合运算,首先要解决的问题是复数的四则运算,确保运算正确无误。
然后要解决的就是分离复数这个问题。
分离复数最简单的方法就是输入复数的时候分别输入实部虚部,然后打印。
但这过于简单,于是采取输入一个字符串来接入这个复数,然后用数组的方法进行实部虚部的分离。
用到的数学知识:复数四则运算,与或非运算,进行分支判断;程序设计知识:目标分析->设计算法->程序编写->后期调试。
二、【实验设计(Design)】(20%)(本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等)抽象数据类型的定义:typedef struct Complex //构造复数结构Complex{float real; //定义实部为realfloat imag; //定义虚部为imag}Complex;基本操作:功能一可以字符串形式输入一个复数,用数组的方法从字符串中分离出实部和虚部;功能二可以对输入的两个复数进行简单的加减乘除的四则运算。
模块:加法函数:Complex Add(Complex z1, Complex z2)减法函数:Complex Sub(Complex z1, Complex z2)乘法函数:Complex Mul(Complex z1, Complex z2)除法函数:Complex Div(Complex z1, Complex z2)打印函数:void print_Complex(Complex z)分离实部函数:float Getreal(Complex z)分离虚部函数:float Getimag(Complex z)分离函数:void spread_Complex()算法伪码描述(分离函数):输入一个复数字符串;实部标志为flag1,虚部标志为flag2,得到flag1和flag2的取值,判断该复数是否是完整的复数,或是纯实数、纯虚数;用符号来判断一个完整的复数的实部虚部,如果判断出字符串中接收到了‘+’或者‘-’,则符号前面的算实部,将符号舍去,后面的即为虚部,直到遇上‘i’。
文件加密实验的实训报告
一、实验目的1. 了解文件加密的基本原理和方法。
2. 掌握使用加密软件进行文件加密的操作流程。
3. 提高对数据安全保护的认识,增强实际操作能力。
二、实验环境1. 操作系统:Windows 102. 加密软件:TrueCrypt3. 实验设备:个人电脑三、实验原理文件加密是指通过特定的算法将原始文件转换成难以识别和解读的密文,只有拥有正确密钥的用户才能将密文恢复成原始文件。
本实验采用TrueCrypt加密软件,该软件使用AES-256位加密算法,具有较高的安全性。
四、实验过程1. 创建加密容器(1)启动TrueCrypt软件,选择“创建容器”选项。
(2)选择加密容器类型(如:标准容器、隐藏容器等)。
(3)设置加密容器的文件名和路径。
(4)选择加密算法(如:AES-256位)。
(5)设置加密容器的密码,并确认。
(6)选择加密容器的体积(可自定义)。
(7)开始创建加密容器。
2. 加密文件(1)将需要加密的文件复制到加密容器中。
(2)双击加密容器,输入密码进入。
(3)将需要加密的文件拖拽到加密容器内部。
(4)选择加密容器,点击“系统工具”下的“压缩文件”。
(5)选择压缩格式(如:7z)。
(6)设置压缩文件名和路径。
(7)开始压缩加密文件。
3. 解密文件(1)打开加密容器,输入密码进入。
(2)双击压缩文件,选择解压路径。
(3)设置解压格式(如:7z)。
(4)开始解压文件。
(5)解压完成后,在指定路径下找到解密后的文件。
五、实验结果通过本次实验,成功掌握了使用TrueCrypt软件进行文件加密和解密的方法。
实验过程中,加密文件和密钥均未丢失,加密效果良好。
六、实验总结1. 加密技术在现代信息安全中具有重要作用,能够有效保护用户数据安全。
2. TrueCrypt加密软件具有较高的安全性,使用方便,适合个人和企业使用。
3. 在实际操作中,应严格按照操作流程进行文件加密和解密,确保数据安全。
4. 针对重要数据,建议定期更换密码,以增强安全性。
云南大学软件学院数据结构实验
———————————————————————————————— 作者:
———————————————————————————————— 日期:
实验难度:A□B □ C □
序号
学号
姓名
成绩
指导教师
(签名)
学 期:2017秋季学期
任课教师:ﻩ刘宇
实验题目:
组员及组长:
承担工作:
ﻩﻩﻩz.real=(z1.real*z2.real-z1.imag*z2.imag)/(z1.real*z1.real-z1.imag*z1.imag);
ﻩz.imag = (z1.imag*z2.real-z1.real*z2.imag)/(z1.real*z1.real-z1.imag*z1.imag);
用到的数学知识:复数四则运算,与或非运算,进行分支判断;
程序设计知识:目标分析->设计算法->程序编写->后期调试。
二、【实验设计(Design)】(20%)
(本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等)
ﻩ{
ﻩﻩif(fushu[k]=='+'||fushu[k] =='-')//判断是否为完整复数
ﻩﻩflag1++;
ﻩﻩﻩelseif(fushu[k]=='i')/*判断是否为纯实数*/
ﻩﻩflag2++;
}
ﻩif(flag2 > 1)
{
ﻩﻩprintf("ERROR!");
ﻩﻩsystem("pause");
云南大学软件学院汇编语言实验报告三
五、练习
1. 已知程序段定义如下:
MOV AX,1234
MOV CL,4
SHL AX,CL
INC AX
DEC CL
ROR AX,CL
MOV BX,4
MUL BX
MOV BX,4
DIV BX
INT 20
(1)每条指令执行后,AX寄存器中的内容是什么?
(2)每条指令执行后,标志寄存器的各位标志等于什么?
(3)程序结束时,AX和DX的内容等于什么?
2. 编写一程序求双字数据的绝对值。
双字数据保存在DX和AX中,结果保存在BX和CX中。
3. 编制程序,将DX和AX中的双字右移4位。
mov ch,4
go: shr dx,1
rcr ax,1
dec ch
jnz go
4. 编制程序,判断DL寄存器的低4位是否全为0?是否有0?判断AL寄存器中的数值是奇数还是偶数?是否为4的倍数?
6. 编制程序,用一条指令让AX寄存器清0;用一条指令使DX寄存器高3位为1,其余位保持不变;用一条指令使BL寄存器低4位为0,其余位保持不变;用一条指令,使SI和DI寄存器中对应位不相同的位置均置1;
7. 从内存3000H开始的单元中顺序存放着40个同学某门课的考试成绩,试编写程序段求该班该门课的总成绩和平均成绩。
实验报告 加密与解密(文件) C语言
实验报告---文件的加密与解密一、问题重述基于对各种加密算法的理解,结合各种加密、解密算法,选择合适的加密方法分别对文件进行加密和解密。
二、实验目的及要求2.1 实验目的1)在Linux环境下编写C语言程序,实现文件加密与解密;2)通过此次实验了解通信过程中不同的加密方式;3)了解不同的加密算法及加密过程;4)从多种加密和解密方式出发,对加密和解密的知识进行扩展。
2.2 实验要求根据不同的加密算法,设计加密程序,完成对文件的加密和解密。
2.3实验环境操作系统:Linux操作系统、window10操作系统;C语言环境: vim编辑器、DEV C++编辑器。
硬件环境:机房内电脑及个人笔记本电脑。
三、总体设计及思路3.1 实验思路对于文件的加密和解密主要采用ASCII与十进制数字之间相互转换的方法。
1)准备部分新建三个文件,分别命名为file1、file2、file3,其中file1装有源数据;将对file1加密后的信息放入file2中;对file2进行解密,解密生成的信息放入file3中。
2)计算部分当进入加密模式,首先对文件file1、file2进行读取操作,在保证成功读取文件的前提下,采用十进制转ASCII码的方法对文件file1进行加密,且加密后的数据保存在file2中,即文件file2是文件file1的加密文件。
采用ASCII码转十进制的方法对文件file2进行解密,解密后的数据放入file3中,即file3是file2的源文件。
四、实验过程4.1.1文件的读取顾名思义文件的加密和解密是以文件作为依托的,所以我们首先需要新建两个文件,文件1存放原始数据,其名字定义为file1.text;对文件1进行加密后需要将加密后的数据存放至文件2中,此处将文件2命名为file2.txt,最后将利用fopen函数以读取的方式打开文件,文件读取代码如下:4.1.2 文件的加密文件的加密过程采用十进制转三位ASCII码的加密方式,对从文件1中读取的字符依次进行ASCII码的转换,此段代码如下:4.1.3 文件的解密文件的解密过程采用与加密过程相反的操作,在linux下新建一个文件“file3.txt”,对加密后保存到文件2内的数据字符进形读取,将其转化为十进制,再将解密后的结果保存到file3中。
文件加密实验报告
一、实验目的1. 了解文件加密的基本原理和常用加密算法。
2. 掌握文件加密工具的使用方法,包括加密和解密操作。
3. 通过实验加深对数据安全重要性的认识,提高信息安全防护意识。
二、实验环境1. 操作系统:Windows 102. 文件加密工具:TrueCrypt3. 加密文件:一份包含个人敏感信息的Word文档三、实验内容1. TrueCrypt简介TrueCrypt是一款免费的PC数据加密软件,支持Vista和Linux系统。
它可以在硬盘或闪存上创建一个或多个虚拟磁盘,所有虚拟磁盘上的文件都被自动加密。
加密后,需要通过密码来访问加密数据,加入了AES-256加密算法,使得加密数据几乎不可能被破解。
2. 加密文件(1)下载并安装TrueCrypt软件。
(2)打开TrueCrypt软件,选择“创建加密容器”功能。
(3)选择加密算法,这里选择AES-256位加密。
(4)设置加密容器大小,确保足够存放需要加密的文件。
(5)选择存储位置,创建加密容器。
(6)将Word文档拖拽到加密容器内,等待加密完成。
3. 解密文件(1)打开TrueCrypt软件,选择“打开加密容器”功能。
(2)选择加密容器,输入密码。
(3)将加密容器内的文件拖拽到目标位置,等待解密完成。
4. 实验结果分析通过本次实验,成功地将Word文档加密并解密。
加密后的文件无法被未授权用户访问,保证了文件的安全性。
同时,实验过程中也加深了对数据安全重要性的认识,提高了信息安全防护意识。
四、实验总结1. 文件加密是保障信息安全的重要手段,可以有效防止数据泄露和篡改。
2. 常用的加密算法有AES、DES、RSA等,应根据实际需求选择合适的加密算法。
3. 使用文件加密工具时,要确保加密过程的安全性,避免密码泄露。
4. 定期备份加密文件,以防数据丢失。
5. 提高信息安全防护意识,加强个人信息保护。
五、实验建议1. 在实际应用中,根据数据敏感程度选择合适的加密强度。
文件加密实验报告
文件加密实验报告院系:专业:班级:学号:姓名:指导教师:一、需求分析 (3)二、系统设计 (3)三、软件开发 (16)四、软件测试 (16)五、特点不足 (21)六、过程和体会 (25)七、源码和说明 (28)一、需求分析1、题目要求编写一个文件加密程序enc,对于任意的文件进行加密和解密,加密算法何以自选。
程序功能:1.程序带有3个命令行参数,依次为运行模式、密钥、文件名。
Enc e 密钥文件名对于文件进行加密Enc d 密钥文件名对于文件进行解密要求加密后的文件进行解密能够完全恢复成原文件。
2、需求分析重点考察1.基本的算术运算和逻辑位运算。
2.用汇编实现简单的数据结构。
3.INT21H系统功能调用中有关文件、目录的操作。
4.可执行程序的参数使用。
5.综合解决问题的能力。
二、系统设计1、概要设计(1)设计思路1、要对一个文件进行加密处理首先要将其打开,汇编中可用3DH功能调用按路径打开文件。
2、打开文件之后便是将其调入内存之中,因而用到3FH功能调用,从文件或设备中读入。
3、按写好的加密程序对其进行加密处理。
4、将加密后的内存中的文件重新写入覆盖掉原文件,可用40H功能调用,向文件或设备写入。
5、覆盖掉原文件后再关闭文件,可用3EH功能调用,关闭文件。
6、解密部分与加密部分相仿,先打开文件,读入内存,解密后重新写入覆盖原文件,最后关闭文件(2)加密原理利用汇编语言读文件功能调用,将文件数据每次读一个字节至内存之中,输入加密密匙,将其由字符转变成数字,与内存中的文件内容相加,改变文件内容,再写入覆盖文件,完成加密处理。
(3)解密原理解密原理与加密原理基本一致,将文件数据每次读一个字节至内存之中,输入加密密匙,将其由字符转变成数字,由内存中的待解密的文件内容减去密匙,改变文件内容,再写入覆盖文件,完成解密处理。
(4)模块划分程序分成三大模块1、主模块对文件进行读写操作及输出信息提示,并调用加密和解密模块。
编码理论实验报告实验三加密编码——DES数据加密算法
实验名称实验三加密编码--------DES数据加密算法一、实验目的1. 了解DES加密,解密过程;2. 在Visual C++环境中运用C语言实现DES加密,解密;3. 会用DES加密方法对文件进行加密。
二、实验内容1. 在Visual C++环境中运用C语言熟练实现DES加密;2. 在Visual C++环境中运用C语言熟练实现DES解密。
三、实验原理1. DES加密的定义DES是一种分组密码,也是一种单钥密码。
2. DES的特点明文分组比较短、密钥较短、密码生命周期较短、运算速度较慢。
3. DES加密算法描述在DES中明文分组长为64比特,密钥长为56比特。
明文处理过程大致分为3个阶段,首先为一个初始置换IP,用于重排明文分组的64比特数据。
然后是相同功能的16轮迭代,每轮中都有置换和代换运算,第16轮变换的输出分为左右两半,并被交换次序。
最后再经过一个逆初始置换(IP的逆)从而产生64比特的密文。
在上述运算中还涉及密钥的产生和运算。
4. DES解密算法描述DES的解密过程和DES的加密过程完全类似,只不过将16轮的子密钥序列K1,K2,…,K16的顺序倒过来。
即第一轮用第16个子密钥K16,第二轮用K15,以此类推。
四、实验步骤1. DES加密步骤(1)初始IP置换表2-1 初始置换IP58 50 42 34 26 18 10 260 52 44 36 28 20 12 462 54 46 38 30 22 14 664 56 48 40 32 24 16 859 51 43 35 27 19 11 361 53 45 37 29 21 13 563 55 47 39 31 23 15 7说明:上表元素下标从1开始,按行优先顺序排列,表中数字代表经过IP置换后,在该位置的元素对应的在原分组中元素的下标。
如:变换后第一个位置的元素为原来下标为58的元素,变换后下标为2的元素为原来下标为50的元素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
云南大学软件学院数据结构实验报告(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □ C □学期:任课教师:实验题目: 实验三栈和队列及其应用小组长:联系电话:电子邮件:完成提交时间:年月日云南大学软件学院2010学年秋季学期《数据结构实验》成绩考核表学号:姓名:本人承担角色:课题分析,算法设计,程序编写,后期调试,完成实验报告综合得分:(满分100分)指导教师:年月日(注:此表在难度为C时使用,每个成员一份。
)云南大学软件学院2010学年秋季学期《数据结构实验》成绩考核表学号:姓名:本人承担角色:课题分析,算法设计,后期调试综合得分:(满分100分)指导教师:年月日(注:此表在难度为C时使用,每个成员一份。
)(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。
难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)本次实验的目的在于使我们深入了解栈和队列的特性,以便在实际问题背景下灵活运用它们;同时还将巩固对这两种结构构造方法的理解。
核心算法:加密与解密算法。
加密算法:将文件各位取反,再加上密码值。
构成密文。
解密算法:将密文减去密码值,在按位取反,获得明文。
二、【实验设计(Design)】(20%)(本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系)定义一个类MyClass:class MyClass{char *buffer; //定义存储文件的缓存char name[MAX_PATH]; //来存储用户输入的文件名char pass[16]; //来存储用户输入的密码DWORD size, psdlen; //定义变量存储文件的长度,密码的长度DWORD GetSize(); //检查文件的长度void EncAlg(DWORD bsize); //声明加密函数void DecAlg(DWORD bsize); //声明解密函数public:MyClass(char *, char *); //声明构造函数~MyClass(); //声明析构函数FILE *fp; //指向文件流的指针BOOL Ecpenc(); //加密算法BOOL Ecpdec(); //解密算法};三、【实现描述(Implement)】(30%)(本部分应包括:抽象数据类型具体实现的函数原型说明、关键操作实现的伪码算法、函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。
)四、【测试结果(Testing)】(10%)(本部分应包括:对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析总结)测试数据,文本文档1.txt,位于程序根目录内含有字符串:hello,world以密码123进行加密后显示密文为:-----犁---以密码123解密后显示为hello,world以密码12345解密后显示为helil-uipoe测试功能成功!四、【实验总结】(10%)(本部分应包括:自己在实验中完成的任务,注意组内的任意一位同学都必须独立完成至少一项接口的实现;对所完成实验的经验总结、心得)这次和我们小组完成这个文件加密解密程序,大家分工协作,配合默契。
我在这个小组中参与了课题分析,算法设计,后期测试。
独立完成了程序代码的编写,实验报告的编写。
通过这次试验,我们了解了,如何对一个文件通过c++语言进行操作,在使用文件流的时候应该注意哪些要素,成功解决了有些情况下密码错误也能正常解密的BUG五、【项目运作描述(Operate)】(10%)(本部分应包括:项目的成本效益分析,应用效果等的分析。
)1. 本程序运行的环境为32位MS-DOS操作系统或者Windows NT环境下的CMD 命令行模式。
2. 进入程序后的开始界面:3. 输入用户需要加密的文件路径及文件名,在当前目录下直接输入文件名即可:这是用来测试的文本文件,内含有内容hello,world输入文件名:1.txt4. 设定密码:5. 此时系统会弹出确认菜单,用户可以查看之前的输入是否正确:6. 如果用户检查出错误则键入n进行重新输入,如果用户确认正确则键入y确认,此时系统会弹出操作菜单,用户可以自行选择进行什么操作(加密文件,解密文件,退出)7. 选择1号功能将制定的文件加密,当加密成功后系统会有如下提示:8. 此时被加密文件显示为密文:当用户需要解密时,同样进行上述操作,在正确输入密码且选择解密功能后,系统显示为:被解密文件显示为正常的人类文字:9.如若用户输入了错误的密码并且选择解密功能的话,文件会被进一步加密,将无法读出被保护内容。
六、【代码】(10%)(本部分应包括:完整的代码及充分的注释。
注意纸质的实验报告无需包括此部分。
格式统一为,字体: Georgia , 行距: 固定行距12,字号: 小五)#include <iostream>#include <fstream>#include <cstring>#include <cstdio>#include <windo ws.h>int psd1;class MyClass{char *buffer;char name[MAX_PATH];char pass[16];DWORD size, psdlen;DWORD GetSize();void EncAlg(DWORD bsize);void DecAlg(DWORD bsize);public:My Class(char *, char *);~MyClass();FILE *fp;BOOL Ecpenc();BOOL Ecpdec();};int TransPasswo rd(char * transp){int psd = 0,i;for(i=0;i<=15;i++){psd = psd * 10 + (int)(transp + i * sizeof(char));}transp;return psd;}int main(){char name[MAX_PATH];char psd[16];char c;std::cout << "Welco me to use EasyEncryption v1.0\n";std::cout << "Please enter the file name which y o u wanted: ";std::cin >> name;std::cout << "Please enter the passwo rd: ";std::cin >> psd;psd1 = TransPasswo rd(psd);My Class ecp(name,psd);do{std::cout << "What can we do fo r y o u?";std::cout << "\n1 - To encipher the file.";std::cout << "\n2 - To decipher the file.";std::cout << "\n3 - Exit this pro gram";std::cout << "\n\nPlease enter the number (1-3) to choose one service: ";std::cin >> c;}while( c <'1'|| c>'3' );switch(c){case '1':std::cout << "\nEnciphering,please wait...\n";if( ecp.Ecpenc() )std::cout << "Encipher succeeded.\n";elsestd::cout << "ERROR: Canno t Encipher the file.\n";break;case '2':std::cout << "\nDeciphering,please wait...\n";if( ecp.Ecpdec() )std::cout << "Decipher succeeded.\n";elsestd::cout << "ERROR:Canno t Decipher the file.\n";break;default:return 0;}std::cout << "\nPlease enter the ENTER key to exit this pro gram.\n";getchar();getchar();return 0;}My Class::MyClass(char *fname, char *psd){strcp y(name,fname);strcp y(pass,psd);size = GetSize();char ch;if(size == 0){std::cout << "ERROR: Canno t find the file o r unkno w erro r occured." << "\n";std::cout << "Press the ENTER key to exit." << "\n";getchar();getchar();exit(1);}psdlen = strlen(pass);std::cout << "+----------------confirmation table-----------------------+\n";std::cout << "| File name: " << name << '\n';std::cout << "| Lengh of file: " << size << '\n';std::cout << "| Lengh of Password: " << psdlen << '\n';std::cout << "+---------------------------------------------------------+\n";confirmatio n:std::cout << "Are y o u sure y o u have entered co rrect imfo rmation?(Y/N)\n";std::cin >> ch;if (ch == 'y' || ch == 'Y')goto next;else if (ch == 'n'||ch == 'N'){std::cout << "Please try again.\n";std::cout << "Press any key to exit...\n";getchar();getchar();exit(1);}else{std::cout << "Invalid enter, try again.\n";goto co nfirmatio n;}next:std::co ut << "\nWait a mo ment ...\n";fp = fopen(name,"rb+");buffer = new char [65535];}My Class::~MyClass(){delete buffer;fclose(fp);}BOOL My Class::Ecpdec (){DWORD t_size = size;DWORD bsize;DWORD offset = 0;while ( t_size > 65535 ){fread(buffer, 1, 65535, fp);DecAlg(65535);fseek(fp, size - t_size, SEEK_SET);fwrite(buffer,1 , 65535, fp);t_size -= 0x4000;fseek(fp, size - t_size, SEEK_SET);}bsize = fread(buffer,1 , 65535, fp);DecAlg(bsize);fseek(fp, size - t_size, SEEK_SET);fwrite(buffer, 1, bsize, fp);return TRUE;}BOOL My Class::Ecpenc (){DWORD t_size = size;DWORD bsize;DWORD offset = 0;while ( t_size > 65535 ){fread(buffer, 1, 65535, fp);EncAlg(65535);fseek(fp, size - t_size, SEEK_SET);fwrite(buffer,1 , 65535, fp);t_size -= 0x4000;fseek(fp, size - t_size, SEEK_SET);}bsize = fread(buffer,1 , 65535, fp);EncAlg(bsize);fseek(fp, size - t_size, SEEK_SET);fwrite(buffer, 1, bsize, fp);return TRUE;}DWORD My Class::GetSize (){WIN32_FILE_ATTRIBUTE_DATA attr;if( GetFileAttributesEx(name,GetFileExI nfoStandard,&attr) )return attr.nFileSizeLow;return 0;}void MyClass::EncAlg(DWORD bsize){char *p;for ( p = buffer; p < buffer + bsize; p++ ){*p = (*p ^ pass[ (p - buffer) % psdlen ])-psd1;}}void MyClass::DecAlg (DWORD bsize){char *p;for ( p = buffer; p < buffer + bsize; p++ ){*p = (*p+psd1) ^ pass[ (p - buffer) % psdlen ];}}。