收藏 分销(赏)

实现文件简单的加密和解密.doc

上传人:精**** 文档编号:2418199 上传时间:2024-05-29 格式:DOC 页数:67 大小:1.89MB 下载积分:16 金币
下载 相关 举报
实现文件简单的加密和解密.doc_第1页
第1页 / 共67页
实现文件简单的加密和解密.doc_第2页
第2页 / 共67页


点击查看更多>>
资源描述
北京邮电大学毕业设计 实现文件简单的加密和解密 摘要 随着信息社会的到来,人们在享受信息资源所带来的巨大的利益的同时,也面临着信息安全的严峻考验。信息安全已经成为世界性的现实问题,信息安全问题已威胁到国家的政治、经济、军事、文化、意识形态等领域。同时,信息安全也是人们保护个人隐私的关键,是社会稳定安全的必要前提条件。 信息安全是一个综合性的交叉学科领域,广泛涉及数学、密码学、计算机、通信、控制、人工智能、安全工程、人文科学等诸多学科,是近几年迅速发展的一个热点学科领域。信息对抗和网络安全是信息安全的核心热点,它的研究和发展又将刺激、推动和促进相关学科的研究与发展。现今,加密是一种保护信息安全性最有效的方法。密码技术是信息安全的核心技术。 本文是一篇关于文件简单加密和解密软件——文件管家的毕业设计论文:用AES算法实现文件的加密和解密,用MD5实现文件校验功能,用覆盖技术实现文件粉碎功能;并且设计了一套完整的注册码验证体系,防止软件被逆向,从而保护软件的安全。 关键词:文件;加密;解密;粉碎;反逆向;AES Simple implementation file encryption and decryption Abstract With the arrival of the information society, people not only enjoy the enormous benefits of information resources, but also face the severe challenges of information security. Information security has become a worldwide problem. The problem has become a threat to the political, economic, military, cultural, ideological and other aspects of a country. Meanwhile, the information security is the key of protecting individual privacy and the prerequisite for social stability and security. Information security is a comprehensive interdisciplinary field, involving a wide range of disciplines such as mathematics, cryptography, computer, communications, control, artificial intelligence, security, engineering, humanities and so on, It has been being a hot subject with rapid development. Information countermeasure and network security is a core focus, whose research and developments will stimulate and accelerate the study and progress of related disciplines. So far, the password to information security technology is the most effective method. Cryptography is the core technology of information security. This article is about a software named File Manager, which can simply encrypt and decrypt files. The software uses AES algorithm to encrypt and decrypt files, MD5 to check the files, and overlay technique to achieve the feature of file shredder. Meanwhile, there is a complete set of design registration code verification system, which is used to protect the software from reverse, thus to protect the security of the software. Key words:file; encrypt; decrypt; shredder; Anti-Reverse; AES ii 目  录 摘要 i Abstract ii 1 绪论 1 1.1 论文背景 1 1.2 主要工作 1 1.3 本文结构 1 2 AES介绍 2 2.1 AES概述 2 2.2 轮密钥加 (AddRoundKey) 3 2.3 字节替代 (SubBytes) 3 2.4 行移位 (ShiftRows) 5 2.5 列混淆 (MixColumns) 6 2.6 密钥调度 (Key Schedule) 7 3 系统设计 8 3.1 设计概述 8 3.1.1 界面设计 8 3.1.2 实现代码设计 8 3.1.3 操作流程 8 3.2 界面设计 9 3.2.1 LOGO设计 9 3.2.2 加密选项卡的设计 10 3.2.3 解密选项卡的设计 11 3.2.4 工具箱选项卡的设计 12 3.3 实现代码设计 12 3.3.1 加密选项卡的设计 13 3.3.2 解密选项卡的设计 14 3.3.3 工具箱选项卡的设计 15 3.3.4 程序流程图 16 4 设计结果及分析 20 4.1 设计结果展示 20 4.1.1 软件初始化 20 4.1.2 注册码验证 22 4.1.3 文件加密 24 4.1.4 文件解密 27 4.1.5 文件校验 29 4.1.6 文件粉碎 29 4.2 设计结果分析及说明 30 4.2.1 软件初始化 30 4.2.2 注册码验证 32 4.2.3 文件加密 35 4.2.4 文件解密 37 4.2.5 文件校验 38 4.2.6 文件粉碎 39 结论 41 参考文献 42 致谢 43 外文原文 44 中文翻译 55 1 绪论 1.1 论文背景 信息安全是一个综合性的交叉学科领域,广泛涉及数学、密码学、计算机、通信控制、人工智能、安全工程、人文科学等诸多学科,是近几年迅速发展的一个热点学科领域。信息对抗和网络安全是信息安全的核心热点,它的研究和发展又将刺激、推动和促进相关学科的研究与发展。 网络技术的快速发展,给我们的生活带来了方便,提高了我们的工作效率,丰富了我们的生活,但同时,安全问题也时刻困扰着我们。连接在网络上的计算机随时都有被黑客攻击的可能,在网络上收发的文件也有可能被黑客截获,而这种不安全的因素是TCP/IP协议所固有的,所以为了保护重要的文件安全,我们必须给重要的文件加密。 本论文讲述了加密技术的实现。通过数据加密,人们可以有效地保证个人数据的安全,以及在通信线路上的内容不被泄露,而且还可以检验传送信息的完整性。 1.2 主要工作 实现文件简单的加密和解密,保护数据安全。实现文件校验功能,用于验证文件的完整性和正确性。通过覆盖技术使删除的文件不可恢复,实现文件粉碎功能。设计一套完整的加密体系,在核心代码运行前优先取得程序控制权做校验工作,保护软件的安全。 1.3 本文结构 本文第一部分主要以绪论为主,说明了文章的研究背景、主要工作,概要说明了所做的工作。第二部分主要是文件加密解密的相关知识的介绍,介绍了AES算法的原理。第三部分叙述了设计的思路、重点。第四部分为设计结果及分析,将劳动成果展现给大家。第五部分为结论、致谢和参考文献,列出了文章的参考文献和引用文献,反映本文研究工作的背景和依据。 2 AES介绍 2.1 AES概述 AES是一个迭代的、对称密钥分组的加密算法,即它的加密和解密过程都使用同一个密钥。AES分组密码接受一个128位的明文,并且在一个128、192、256位秘密密钥的控制下产生一个128位的密文。它是一个替代 - 置换网络的设计,并且带有一个称为轮的步骤的集合,其中轮数可以为9、11或者13(对应于128、192或者256位的密钥),这样可以将明文映射为密文。 一轮AES由下面的4步组成: (1)字节替代 (SubBytes):用一个S盒完成分组中的按字节的代换。 (2)行移位 (ShiftRows):一个简单的置换。 (3)列混淆 (MixColumns):一个利用在域GF()上的算术特性的代换。 (4)轮密钥加 (AddRoundKey):利用当前分组和扩展密钥的一部分进行按位XOR。 每一轮分别使用它自己的128位轮密钥 (round key),它是由秘密密钥通过一个称为密钥调度 (key schedule) 的过程处理而产生的。不要低估一个设计合理的密钥调度方案的重要性。它把密钥的熵散发给每一个轮密钥。如果熵没有被很好地传播,就会产生各种麻烦,例如等价密钥、相关密钥以及其他类似的分别征服攻击 (distinguishing attack)。 AES把128位的输入看作是一个由16个字节组成的向量,并用一个4 x4的列矩阵(big-endian)的形式来组织,叫做状态(state)。即第1个字节映射为,第3个字节映射为,第4个字节为,第16个字节映射为,如图2-1所示。 A0.0 A0.1 A0.2 A0.3 A1.0 A1.1 A1.2 A1.3 A2.0 A2.1 A2.2 A2.3 A3.0 A3.1 A3.2 A3.3 图2-1 AES的状态示意图 整个AES分组密码由下面的步骤组成: (1)AddRoundKey(round=0) (2)for round=1到Nr-1 (9、11或者13,这取决于密钥的大小)do SubBytes ShiftRows MixColumns AddRoundKey(round) (3)SubBytes (4)ShiftRows (5)AddRoundKey(Nr) 2.2 轮密钥加 (AddRoundKey) 轮函数的这一步是把轮密钥加到状态中(在GF(2)中)。它执行了16个并行的把密钥加到状态中的运算。GF(2)的加法是通过异或运算来完成的,如图2-2所示。 图2-2 AES AddRoundKey函数 其中的K炬阵是一个轮密钥并且对每一轮都有一个惟一的密钥。因为密钥的加法是一个简单的异或,所以它常实现为在32位软件中从列开始的一个32位的异或操作。 2.3 字节替代 (SubBytes) 轮函数的SubBtes步骤是用来执行SPN中的非线性混清步骤的。它把16个字节的每一个都并行地映射为一个新的字节,这是通过一个两步骤的替代操作来完成的,如图2-3所示。 图2-3 AES SubBytes函数 该映射变化是一个简单的查表操作,AES定义了一个S盒,如表2.1所示,它是由16*16个字节组成的矩阵,包含了8位值所能表达的256种可能的变换。State中每个字节按照如下的方式映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,然后取出S盒中对应行列的元素作为输出。例如,十六进制值95所对应的S盒的行值是9,列值是5,S盒中在此位置的值是2A。相应地,95被映射为2A。 表2.1 AES的S盒 y 0 1 2 3 4 5 6 7 8 9 A B C D E F x 0 63 7C 77 7B F2 6B 6F C5 30 01 67 2B FE D7 AB 76 1 CA 82 C9 7D FA 59 47 F0 AD D4 A2 AF 9C A4 72 C0 2 B7 FD 93 26 36 3F F7 CC 34 A5 E5 F1 71 D8 31 15 3 04 C7 23 C3 18 96 05 9A 07 12 80 E2 EB 27 B2 75 4 09 83 2C 1A 1B 6E 5A A0 52 3B D6 B3 29 E3 2F 84 5 53 D1 00 ED 20 FC B1 5B 6A CB BE 39 4A 4C 58 CF 6 D0 EF AA FB 43 4D 33 85 45 F9 02 7F 50 3C 9F A8 续表2.1 AES的S盒 7 51 A3 40 8F 92 9D 38 F5 BC B6 DA 21 10 FF F3 D2 8 CD 0C 13 EC 5F 97 44 17 C4 A7 7E 3D 64 5D 19 73 9 60 81 4F DC 22 2A 90 88 46 EE B8 14 DE 5E 0B DB A E0 32 3A 0A 49 06 24 5C C2 D3 AC 63 91 95 E4 79 B E7 C8 37 6D 8D D5 4E A9 6C 56 F4 EA 65 7A AE 08 C BA 78 25 2E 1C A6 B4 C6 E8 DD 74 1F 4B BD 8B 8A D 70 3E B5 66 48 03 F6 0E 61 35 57 B9 86 C1 1D 9E E E1 F8 98 11 69 D9 8E 94 9B 1E 87 E9 CE 55 28 DF F 8C A1 89 0D BF E6 43 68 41 99 2D 0F B0 54 BB 16 S盒被设计成能防止已有的各种密码分析攻击。AES的开发者特别寻求在输入位和输出位之间几乎没有相关性的设计,且输出值不能通过利用一个简单的数学函数变换输入值所得到。当然,S盒必须是可逆的,即逆S盒[S盒(a)]=a。然而,因S盒(a)=逆S盒(a)不成立,在这个意义上S盒不是自逆的。例如,S盒(95)=2A,但逆S盒(95)=AD。 2.4 行移位 (ShiftRows) ShiftRows这一步对状态中的每一行分别进行向左循环移动0、1、2和3个位置。它是完全线性的,如图2-4所示。 图2-4 AES ShiftRows函数 在实际应用中,我们将会看到这是通过重命名 (renaming) 来实现的而不是一个实际的移动。也就是说,通过对字节移动的替代,我们只是简单地在得到它们的地方对它们进行修改就可以。在32位的软件中,我们可以很容易地把ShiftRows和SubBytes以及MixColumns混合,而不用来回交换字节。 2.5 列混淆 (MixColumns) MixColumns这一步对状态中的每一列乘上一个4*4的变换,这个变换就是所谓的极大距离可分码 (Maximally Distance Separable, MDS)。这一步的目的是扩大差别并且让输出线性依赖于其他输人。即如果一个单一的输入字节在两个明文中发生了改变(输入中所有其他的字节没变),这个改变将尽可能快地传播到状态中的其他字节中去,如图2-5所示。 图2-5 AES MixColumns 列混淆变换和行移位变换使得在经过几轮变换后,所有的输出位均与所有的输入位相关。 2.6 密钥调度 (Key Schedule) 密钥调度是负责把输人的密钥转化成所需的Nr+1个128位轮密钥。图2-6中的算法将计算轮密钥。 输入: Nk 密钥中的32位字的个数(4、6或者8) w 4 × (Nr + 1)个32位字的数组 输出: w 使用密钥来设显一个数组 (1)以big-endian的格式把秘密密钥预加载到w的第一个Nk字中 (2)i = Nk (3)while(i < 4 * (Nr + 1))do (1)temp = w[i - 1] (2)if(i mod Nk = 0) temp = SubWord(RotWord(temp)) XOR Rcon[i / Nk] (3)else if(Nk > 6 and i mod Nk = 4) temp = SubWord(temp) (4)w[i] = w[i-Nk] xor temp (5)i = i + 1 图2-6 AES密钥调度 密钥调度还需要两个额外的函数。SubWord()的输人为32位并且并行地把每个字节发送给AES的SubBytes替代表中。RotWord()把字向右循环移动8位。Rcon表是一个数组,它只存储了多项式g(x)=x的前10个幕模AES多项式的最高字节。 3 系统设计 3.1 设计概述 此次毕业设计采用的开发工具是Visual Studio 2010,所选用的开发语言是C++,软件名称为:文件管家。 目前网络上,文件加密与解密的软件比较多,功能也比较强大,之所以会选择“实现文件简单的加密和解密”这个题目,并且去设计一款这方面的软件,主要有两方面原因:一是因为一直对信息安全比较感兴趣,也杂七杂八的看过一些这方面的资料,想通过这次毕业设计,学以致用;二是因为之前用过一些文件加解密的软件,但是感觉操作比较复杂,当然它们的功能都比较强大,但作为普通用户,我们可能并不需要那么强大而复杂的功能,所以这次毕业设计,想在用户体验上下一些功夫,设计一款能够满足我们日常需要的文件加解密软件。总体的设计思路是:既要保证文件的安全性,也要兼顾用户体验,避免繁琐的操作。 本次毕业设计的核心内容分为两部分,一部分是文件加密,作为一款文件加密软件,最主要的内容就是文件加密的安全性,即采用这款软件加密后的文件,会不会被人轻易解密;另一部分是软件安全,我们知道,软件的开发流程是编辑、编译、调试,然后就是发布可执行文件。可执行文件对一般用户来说,就是一个小程序,但是对于一些别有用心的人,它不仅是一个小程序,它还是程序的源码,他能够把可执行文件还原为源文件,这样我们程序里的算法就被他一览无余,所以我们在发布之前还需要对可执行文件做一些工作,来保护软件的安全性,由其我们这是一款加密软件,在保护文件安全的同时,也要做好自身的防护工作。 3.1.1 界面设计 界面主体采用选项卡设计,共有3个选项卡,分别是加密、解密和工具箱。加密选项卡用于完成文件加密,解密选项卡用于完成文件解密,工具箱选项卡包含文件校验和文件粉碎两个界面。 3.1.2 实现代码设计 加解密程序,采用AES算法。文件校验,采用MD5算法。文件粉碎,删除文件之后,会用空数据或随机数据多次覆盖在原数据上,保证删除之后的文件不能被还原。 软件安全:第一次使用,需要输入注册码(输入后保存到配置文件里)。每次运行软件前,根据注册码生成一个key(算法不可逆),用key解密核心代码(算法可逆),解密后根据核心代码生成一个校验码(算法不可逆),与存在程序里的校验码比较,不正确提示并退出程序,正确则进入程序。 3.1.3 操作流程 第一次运行程序,需要以管理员身份运行程序,完成修改注册表和生成配置文件的功能。再次运行程序,需要输入注册码,正确则保存注册码到配置文件并进入程序,不正确则不保存注册码并提示退出程序。 加密:鼠标右键单击需要加密的文件,资源管理器菜单会出现“文件管家”的选项,点击即会出现文件加密对话框,输入加密密码和确认密码,点击加密,即可完成加密操作。需要注意的是,执行加密操作默认删除源文件,可以在点击加密之前,去掉“加密后,删除源文件”前面的勾,则不会删除源文件。 解密:加密完成后,文件后缀变为MYFM(MyFileManager的缩写),加密后的文件图标会被换成“文件管家”的LOGO。要解密的时候,直接双击该文件,默认用文件管家打开,输入密码即可完成解密操作。 总体来看,程序操作简洁,用户体验比较好。 3.2 界面设计 运行VS2010,创建一个MFC项目,命名为:文件管家。项目建好后,将默认对话框作为加密解密工具的主界面。在主界面添加一个Tab Control,需要三个选项卡,分别是:加密、解密和工具箱,下面分别对这三个选项卡做详细的设计,设计时要用到vs2010里工具箱的工具。详细设计如下: 3.2.1 LOGO设计 图3-1 LOGO 采用黑色主元素,黑色代表未知,即加密后文件比较安全,如图3-1所示。 3.2.2 加密选项卡的设计 图3-2 加密选项卡属性设置 建立一个对话框资源,Style属性设为Child,Border属性设为None,如图3-2所示。解密选项卡和工具箱选项卡同加密选项卡。 图3-3 加密选项卡界面设计 加密选项卡最上面是一个不可读的Edit Control,用来显示需要加密文件的文件名,因为文件名不需要更改,所以这里设置Edit Control的Disabled为True。在加密时需要输入加密密码,为了避免因用户按错键而导致密码不正确,这里需要输入确认密码。接着是一个Check-box Control,用来选择加密后是否删除源文件,默认删除源文件。最后是两个Button Control,分别为:加密和取消。点击加密,则执行加密操作;点击取消,则放弃加密操作,并退出程序,如图3-3所示。 3.2.3 解密选项卡的设计 图3-4 解密选项卡界面设计 解密选项卡最上面是一个不可读的Edit Control,用来显示需要解密文件的文件名,因为文件名不需要更改,所以这里设置Edit Control的Disabled为True。接着又是一个Edit Control,用来输入解密密码。接着是一个Check-box Control,用来选择解密后是否删除源文件,默认删除源文件。最后是两个Button Control,分别为:解密和取消。点击解密,则执行解密操作;点击取消,则放弃解密操作,并退出程序,如图3-4所示。 3.2.4 工具箱选项卡的设计 图3-5 工具箱选项卡界面设计 工具箱选项卡包含两部分,文件校验和文件粉碎,工具箱选项卡最上面是一个Edit Control,用来显示当前正在操作文件的文件名,如图3-5所示。 文件校验:包含一个Edit Control,用来显示当前文件的MD5值。 文件粉碎:包含一个Edit Control用来设置擦写次数,次数必须大于等于0。紧挨着Edit Control的是一个Spin Control,用来增减Edit Control里值。之后是两个Radio-button-Control,用来选择填充数据,默认选择空数据,用空数据来擦写源文件所在的磁盘位置。最后是两个Button Control,分别为:粉碎和取消。点击粉碎,则执行粉碎操作;点击取消,则放弃粉碎操作,并退出程序。 3.3 实现代码设计 在界面设计的基础上,进行代码设计。第一次运行程序,需要输入注册码(若正确则保存到配置文件中),之后每次运行都要根据注册码生成key(不可逆算法),然后用key解密核心代码(可逆算法),解密后根据核心代码生成一个校验码(不可逆算法),与存在程序里的校验码比较,不正确提示并退出程序,正确则进入程序,这些代码放在主对话框的OnInitDialog()函数中,在程序初始化时运行。其余详细设计如下: 3.3.1 加密选项卡的设计 图3-6 加密选项卡添加处理类 使用ClassWizard生成新的类,基类为CDialogEx,对话框ID为IDD_DIALOG1,类名为:CPage1,这样就为加密选项卡创建了一个类,所有对加密选项卡的操作,都可以写在CPage1类中,如图3-6所示。(解密选项卡、工具箱选项卡同) 图3-7 加密选项卡 程序运行时,首先读取当前操作文件的文件名,显示在文件名编辑框中,如图3-7所示。 点击加密按钮后,首先判断加密密码和确认密码是否为空,若为空则弹出MessageBox,并中断执行加密函数,重新回到输入界面,等待用户输入。若加密密码和确认密码都不为空,则判断加密密码和确认密码是否相同,若不相同,则弹出MessageBox,并中断执行加密函数,重新回到输入界面,等待用户输入。若加密密码和确认密码相同,则读取Check-box Control的值,以确认是否删除源文件。最后调用AES算法,执行文件加密操作,加密成功后,弹出MessageBox,并退出程序。 点击取消按钮,什么操作都不做,直接退出程序。 3.3.2 解密选项卡的设计 图3-8 解密选项卡 程序运行时,首先读取当前操作文件的文件名,显示在文件名编辑框中,如图3-8所示。 点击解密按钮后,首先判断解密密码是否为空,若为空则弹出MessageBox,并中断执行解密函数,重新回到输入界面,等待用户输入。若解密密码不为空,则读取Check-box Control的值,以确认是否删除源文件。最后调用AES算法,执行文件解密操作,解密成功后,弹出MessageBox,并退出程序。 点击取消按钮,什么操作都不做,直接退出程序。 3.3.3 工具箱选项卡的设计 图3-9 工具箱选项卡 程序运行时,首先读取当前操作文件的文件名,显示在文件名编辑框中。调用MD5算法,根据当前文件的内容生成MD5信息值,显示在MD5编辑框中,来校验这个文件是否被“篡改”过,如图3-9所示。 点击粉碎按钮后,首先读取擦写次数,然后读取Radio-button-Control,确定填充数据,用空数据或随机数据填充。最后调用粉碎函数,执行文件粉碎操作,即用填充数据填充当前文件,重复擦写次数次。粉碎成功后,弹出MessageBox,并退出程序。 点击取消按钮,什么操作都不做,直接退出程序。 3.3.4 程序流程图 (1)注册码模块流程图,如图3-10所示。 图3-10 注册验证流程图 (2)加密模块流程图,如图3-11所示。 图3-11 加密流程图 (3)解密模块流程图,如图3-12所示。 图3-12 解密流程图 (4)粉碎模块流程图,如图3-13所示。 图3-13 文件粉碎流程图 4 设计结果及分析 4.1 设计结果展示 4.1.1 软件初始化 (1)右键以管理员身份运行文件管家,如图4-1所示。 图4-1 以管理员身份运行程序 (2)创建配置文件,如图4-2所示。 图4-2 创建配置文件 (3)修改注册表-添加”文件管家“到资源管理器右键菜单,如图4-3所示。 图4-3 添加到资源管理器右键菜单 (4)修改注册表-自定义资源管理器右键菜单中图标,如图4-4所示。 图4-4 设置资源管理器右键菜单图标 (5)修改注册表-自定义文件类型,如图4-5所示。 图4-5 自定义文件类型 (6)修改注册表-自定义文件类型图标,如图4-6所示。 图4-6 设置自定义文件类型图标 (7)修改注册表-自定义文件类型默认打开程序,如图4-7所示。 图4-7 设置自定义文件类型默认打开程序 4.1.2 注册码验证 (1)再次双击运行程序,弹出注册码输入框,如图4-8所示。 图4-8 双击运行程序 (2)输入错误的注册码,弹出提醒对话框,并退出程序,如图4-9所示。 图4-9 注册码错误提示 (3)输入正确的注册码,进入程序主界面,如图4-10所示。 图4-10 注册码正确,进入程序 (4)正确的注册码保存到配置文件中,以后就不需要输入注册码了,如图4-11所示。 图4-11 注册码保存在配置文件 到这里,软件的初始化工作全部完成,下面就可以使用文件管家来进行文件加密、文件解密、文件校验和文件粉碎功能了。 4.1.3 文件加密 (1)右键单击需要加密的文件,在弹出的资源管理器右键菜单中选择“文件管家”,如图4-12所示。 图4-12 右键单击需要加密的文件 (2)确认密码为空,如图4-13所示。 图4-13 密码为空提示 (3)加密密码和确认密码不一致,如图4-14所示。 图4-14 密码不一致提示 (4)加密密码和确认密码一致,如图4-15所示。 图4-15 加密成功提示 (5)加密后的文件后缀为MYFM,图标为文件管家logo,如图4-16所示。 图4-16 加密后图标变化 (6)打开文件,全部为乱码,加密成功,如图4-17所示。 图4-17 加密后内容为乱码 4.1.4 文件解密 (1)双击需要解密的文件,如图4-18所示。 图4-18 双击需要解密的文件 (2)解密密码为空,如图4-19所示。 图4-19 密码为空提示 (3)备份一份加密后的文件,输入错误的解密密码,打开解密后的文件,依然为乱码,如图4-20所示。 图4-20 带解密文件为乱码 (4)输入正确的解密密码,打开解密后的文件,解密成功,如图4-21所示。 图4-21 解密后文件恢复 4.1.5 文件校验 (1)右键单击需要校验的文件,在弹出的资源管理器右键菜单中选择“文件管家”,在弹出的界面中,选择“工具箱”选项卡,如图4-22所示。 图4-22 MD5校验 4.1.6 文件粉碎 (1)右键单击需要粉碎的文件,在弹出的资源管理器右键菜单中选择“文件管家”,在弹出的界面中,选择“工具箱”选项卡,修改擦写次数和填充数据,如图4-23所示。 图4-23 文件粉碎 4.2 设计结果分析及说明 4.2.1 软件初始化 File:CFileManagerDlg.cpp Method:CFileManagerDlg::OnInitDialog() FILE * pf = fopen(exepath, "r"); if (pf == NULL)//根据是否有配置文件,判断程序是否为第一次运行 { pf = fopen(exepath, "w+");//创建配置文件(配置文件用来存放注册码) HKEY hkey;//调用RegCreateKey时用到,得到一个key的句柄 /*-----------------将文件管家添加到资源管理器右键菜单-----------------*/ //获取HKEY_CLASSES_ROOT下"*\\shell\\文件管家\\command"键的句柄 RegCreateKey(HKEY_CLASSES_ROOT, "*\\shell\\文件管家\\command", &hkey); //得到文件管家的绝对路径 GetModuleFileName(NULL, exepath.GetBuffer(MAX_PATH), MAX_PATH); //用ReleaseBuffer去掉exepath没有用到的空间 //因为exepath.GetBuffer(MAX_PATH)得到了一个存放路径的最大空间 exepath.ReleaseBuffer(); exepath = "\"" + exepath + "\"\"%1\"";//拼接字符串,使其为cmd命令 //在hkey中注册一个名为exepath的值 //其值为(const BYTE*)exepath.GetBuffer(exepath.GetLength()) //长度为exepath.GetLength() RegSetValueEx(hkey, NULL, 0, REG_SZ, (const BYTE*)exepath.GetBuffer(exepath.GetLength()), exepath.GetLength()); RegCloseKey(hkey);//释放指定注册键的句柄hkey /*-----------------设置文件管家资源管理器右键菜单的图片-----------------*/ //获取HKEY_CLASSES_ROOT下"*\\shell\\文件管家"键的句柄 RegCreateKey(HKEY_CLASSES_ROOT, "*\\shell\\文件管家", &hkey); //得到文件管家的绝对路径 GetModuleFileName(NULL, exepath.GetBuffer(MAX_PATH), MAX_PATH); exepath.ReleaseBuffer();//用ReleaseBuffer去掉exepath没有用到的空间 //拼接字符串,使其为图标路径 ch = '\\'; n = exepath.ReverseFind(ch); exepath = exepath.Left(n); exepath = exepath + "\\src\\logo.ico"; //在hkey中注册一个名为exepath的值 //其值为(const BYTE*)exepath.GetBuffer(exepath.GetLength()), //长度为exepath.GetLength() RegSetValueEx(hkey, "icon", 0, REG_SZ, (const BYTE*)exepath.GetBuffer(exepath.GetLe
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服