云南大学软件学院数据结构实验三实验报告——文件加密译码器
实验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 架构,是分层架构还是微服务架构等。
同时,还要划分出各个模块,并明确它们之间的关系。
这就像是把大楼划分成不同的区域,如客厅、卧室、厨房等,并确定它们之间的通道和连接方式。
在进行总体设计时,要充分考虑系统的可扩展性、可维护性和性能等方面的要求。
然后是详细设计。
详细设计是对总体设计的进一步细化,包括每个模块的内部结构、算法流程、数据结构、接口定义等。
这就好比是为每个房间确定具体的布局、装修风格、家具摆放等。
详细设计的好坏直接影响到代码的编写质量和效率,因此需要我们非常仔细和认真地对待。
在软件设计过程中,有几个关键的原则需要遵循。
首先是高内聚低耦合原则。
高内聚意味着一个模块内部的各个元素之间联系紧密,共同完成一个明确的功能;低耦合则表示模块之间的依赖关系尽量少,这样当一个模块发生变化时,对其他模块的影响最小。
其次是开闭原则,即软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
- 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 ];}}。