




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
分类号:TP309.2 U D C:D10621-408-(2007) 5786-0密 级:公 开 编 号:2003212056成都信息工程学院学位论文一种信息隐藏工具的设计与实现论文作者姓名:林伟杰申请学位专业:计算机科学与技术申请学位类别:工学学士指导教师姓名(职称):刘永红(副教授)论文提交日期:2007年06月4日一种信息隐藏工具的设计与实现摘 要随着信息技术的发展,信息安全问题越来越受到人们的重视。信息隐藏技术是一门将秘密信息隐藏在非秘密信息(例如音频、视频、静止图像以及文本)当中,从而不引起人们对信息隐藏载体的感知的改变。近几年,信息隐藏技术的发展迅猛,人们提出了许多信息隐藏的方法和算法。现在信息隐藏技术已经广泛的应用于多媒体信息的版权保护及信息安全等领域。该隐藏工具的设计思路是将一段需要隐藏的信息用一套加密算法加密后形成密文,放入到一个文件或者图片的一段代码中,在不影响该文件或图片使用的情况下,使得他人看不到我放入的密文,从而实现对信息的隐藏。本毕业设计的相关要求:用vc+ 6.0做一个工具,这个工具的作用就是将输入的信息使用一套算法加密,然后保存到一副图片中去,并且该图片仍然能够正常观看,达到信息隐藏的目的。关键词:信息隐藏技术;加密;解密;鲁棒性The Design and Development of Tool which can Hide InformationAbstractWith development of the information technology, Information security issues are attracting increasing attention. Information hiding technology can hide secret information in the non-secret information (such as audio, video, static graphics and text) thus people will have no sense with the change about the information hiding carrier. In recent years, information hiding technology has a high speed development, people proposes many information hiding method and algorithm. Now information hiding technology has already had widespread application in multimedia information copyright protection and information security etc. The design of the hidden tools is a need to use a hidden message encryption algorithm encrypted form dense text to a file or into a code without influence the file or picture. So as to let other people cant see the confidential document. Thus the information has been hidden.The relevant demand of the graduated design: using the VC+ 6.0 to make a tool, the function of the tool is that set up a password for the inputted information by a kind of arithmetic. Then the information be kept into a picture and the picture still can be seen normally. At last, the information has been hidden.Key Words: information hiding; encryption; decryption; robustness目 录论文总页数:22页1引言11.1课题背景11.2国内外研究现状11.3本课题研究的意义11.4本课题的研究方法22信息隐藏技术22.1信息隐藏技术的基本概念22.1.1典型信息隐藏系统22.1.2信息隐藏的分类32.1.3信息隐藏技术的特性52.2数字水印评估方法52.2.1典型的攻击测评方法62.2.2常用的失真度检测方法62.3信息隐藏技术的主要应用73工具的设计与开发83.1设计思路与规划83.1.1目的83.1.2步骤规划83.2软件主要功能93.3流程图及界面93.3.1数据加密流程93.3.2数据解密流程93.3.3删除加密数据流程93.4主要功能代码103.4.1加解密原理103.4.2加密代码实现113.4.3解密代码实现133.4.4删除加密信息代码实现143.4.5查找加密信息头、尾的代码实现173.5工具开发过程中的难点与问题19结 论20参考文献20致 谢21声 明221 引言1.1 课题背景随着计算机和通信网技术的发展与普及,数字音像制品以及其他电子出版物的传播和交易变得越来越便捷,但随之而来的侵权盗版活动也呈日益猖獗之势。为了打击盗版犯罪,一方面要通过立法来加强对知识产权的保护,另一方面必须要有先进的技术手段来保障法律的实施。信息隐藏技术以其特有的优势,引起了人们的好奇和关注。人们首先想到的就是在数字产品中藏入版权信息和产品序列号,某件数字产品中的版权信息表示版权的所有者,它可以作为侵权诉讼中的证据,而为每件产品编配的唯一产品序列号可以用来识别购买者,从而为追查盗版者提供线索。此外,保密通信、电子商务以及国家安全等方面的应用需求也推动了信息隐藏研究工作的开展。1.2 国内外研究现状“计算机网络是现代密码学的母亲,而Internet 就是现代信息隐藏技术的母亲。” 世界上第一台通用电子计算机诞生于1945 年,20 世纪70 年代计算机网络的兴起掀起现代密码学的研究热潮,并使密码学发展成为一门相对成熟的学科。随着20 世纪90 年代Internet 的迅速发展,多媒体技术的逐渐成熟和电子商务的兴起,网上多媒体信息急剧增加。如果没有网络,信息技术绝不会有如此迅速的发展,而网络的开放性和资源共享使得网络信息安全问题日益重要。这就迫切需要有效地保护数字产品版权的手段,这种需要正是数字水印技术研究的推动力。1.3 本课题研究的意义多媒体数据的数字化为多媒体信息的存取提供了极大的便利,同时也极大地提高了信息表达的效率和准确性。由于数字化信息以多种形式在网络上迅速地传输,政府、企业及个人都逐渐把网络作为主要的通信手段,人们如今可以通过网络发布自己的作品、重要信息、文件和进行网络贸易等,其发布形式也愈加丰富。但是随之出现的问题也十分严重,作品侵权更加容易,篡改也更加方便。因此,网络与信息安全问题变得越来越重要。随着信息技术的发展与应用的不断地深入,信息安全的内涵也在不断延伸,现有的计算机网络大多数在建立之初都忽略了安全问题,即使考虑了安全问题,也只是把安全机制建立在孤立安全机制上,因此,随着网络的互连程度的夸大,这种安全机制对于网络环境来说形同虚设。另外网络上使用的协议,比如TCP/IP 协议,在制定之初也没有把安全考虑在内。开放性和资源共享是计算机网络安全问题的主要来源,它的安全性主要依赖于加密、网络用户身份鉴别、存取控制策略等技术手段。长期以来,人们一直研究以现代密码学(Cryptography) 为核心的信息安全技术,其具有深刻的研究内容和广泛的应用背景。1.4 本课题的研究方法首先用vc+ 6.0做一个工具,这个工具的作用就是将输入的信息使用一套算法加密,然后保存到一副图片中去,并且该图片仍然能够正常观看,达到信息隐藏的目的。在设计中以需求分析为基础,写出系统开发计划、实现流程及相关问题的实现方法;同时,在开发设计与实现中,要保存好相关的设计文挡,为后面的毕业论文的写作准备材料;最后,系统开发完毕后,进行调试和试运行,做好调试和试运行的相关记录,也为后面的毕业论文的写作准备材料。2 信息隐藏技术2.1 信息隐藏技术的基本概念20 世纪90 年代早期,信息隐藏的各种应用引起不同研究团体的关注和重视。1996 年5 月第一次国际信息隐藏学术研讨会在英国剑桥的召开,使这些独立的研究团体走到一起,从而在信息隐藏的一些基本概念和术语上达成共识。信息隐藏(有时也称数据隐藏)。从广义上看,信息隐藏有多种含义:一是信息不可见,二是信息的存在性隐蔽,三是信息的接收方和发送方隐蔽,四是传输的信道隐蔽。信息隐藏就是将保密信息隐藏于另一非保密载体中,以不引起检查者的注意。这里的载体可以使是图像、视频、音频,也可以是信道,甚至是某套编码体制或整个系统。广义上的信息隐藏技术包括隐写术、数字水印、数字指纹、隐蔽信道、低截获概率通信和匿名信道等等。从狭义上看,信息隐藏就是将某一机密信息秘密隐藏于另一公开的信息中,然后通过公开信息的传输来传递机密信息。狭义上的信息隐藏技术通常指隐写术与数字水印(以及数字指纹)。信息隐藏的基本原理是通过隐蔽性来实现安全性。如果攻击者根本就察觉不到隐蔽信息的存在,自然也就无从攻击。2.1.1 典型信息隐藏系统图1 系统结构它主要由下述四部分组成:信息嵌入,即利用嵌入密钥来实现嵌入对象的隐藏过程。信息提取,即利用提取密钥从隐藏对象或可能经过修改的隐藏对象中提取或恢复出嵌入对象。在提取时,原始的载体对象可能需要参与也可能不需要参与。密钥生成,根据一些安全参数生成嵌入密钥和提取密钥。隐藏分析,隐藏对象可能会被隐藏分析者截获并进行处理。在密钥未知的前提下,隐藏分析者很难从隐藏对象中得到、删除或者发现嵌入对象。2.1.2 信息隐藏的分类信息隐藏学是一门新兴的交叉学科,在计算机、通信、保密学等领域有着广阔的应用前景。其研究涉及密码学、图像处理、模式识别、数学和计算机科学等领域。按隐藏技术的应用目的和载体对象不同,信息隐藏可分为许多分支领域。图2 信息分类隐写术隐写术是那些进行秘密通信技术的总称,通常把秘密信息嵌入或隐藏在其他不受怀疑的数据中。伪装方法通常依赖于第三方不知道隐蔽通信存在的假设,而且主要用于互相信任的双方点到点的秘密通信。因此,隐写术一般无稳健性。例如:在数据改动后隐藏的信息不能被恢复。技术隐写术有多种分类方法,目前主流的分类方法有三类,分别按照隐写系统结构、隐写空间、载体对象类型进行分类。图3 隐写术分类数字水印(包括数字指纹)数字水印(digital watermarking)技术源于信息伪装,主要是指将特定的信息(如认证、注释、版权等)隐藏在数字化宿主信息(如文本、数字化的声音、图像、视频信号等)中。数字水印技术为电子数据的版权保护提供了一个潜在的有效手段,引起了国际学术界与企业界的广泛关注,它己经成为目前国际学术界研究的一个前沿热门方向。隐蔽信道在多级安全水平的系统环境中(比如,军事计算机系统),那些既不是专门设计的也不打算用来传输消息的通信路径称为隐蔽信道。这些信道在为某一程序提供服务时,可以被一个不可信赖的程序用来向它们的操纵者泄密消息。匿名通信匿名通信就是寻找各种途径来隐藏通信消息的主体,即消息的发送者和接收者。根据谁被“匿名”(发送者、接收者,或两者),匿名通信又分为几种不同的类型。Web 应用强调接收者的匿名性,而电子邮件用户更关心发送者的匿名性。阀下信道阀下信道也叫潜信道,它是指在公开信道中所建立的一种实现隐蔽通信的信道。密码协议中的阀下信道是指被用来传输秘密消息的各种编码体制和密码协议中所采取的数学结构。低截获概率信道在现代战争中,即使内容已被加密,敌人也会从发现一个信号而迅速发起对发送者的攻击。因此,截获和反截获是机要通信战线上的重要斗争之一。低截获概率通信,顾名思义就是信号被截获的概率降低的通信技术,其载体对象是整个通信频带。它主要包括扩展频谱通信技术和流星猝发通信技术。2.1.3 信息隐藏技术的特性信息隐藏不同于传统的加密,因为其目的不在于限制正常的资料存取,而在于保证隐藏数据不被侵犯和发现。因此,信息隐藏技术必须考虑正常的信息操作所造成的威胁,即要使机密资料对正常的数据操作具有免疫能力。这种免疫能力的关键是要使隐蔽信息部分不易被正常的数据操作(如通常的信号变换操作或数据压缩)所破坏。根据信息隐藏的不同目的和技术要求,该技术存在以下特性或要求:透明性或不可感知性:利用人类视觉系统或人类听觉系统属性,经过一系列隐藏处理,使隐藏对象没有明显的降质现象,而嵌入对象却无法人为地看见或听见。当然,极个别应用场合可能需要使用可见水印。鲁棒性:指不因隐藏对象通过某种常用信号处理操作而导致嵌入对象丢失的能力。这里的信号处理操作包括滤波操作、有损压缩、打印、扫描、几何变换、D/A 或A/D 转换等等。安全性:指隐藏算法有较强的抗恶意攻击能力,即它必须能够承受一定程度的人为攻击,而使嵌入对象不被破坏。此外,与信息加密一样,信息隐技术最终也需要把对信息的保护转化为对密钥的保护。因此,密码学中对密钥的基本要求也适用于信息隐藏技术,如必须有足够大的密钥空间等。在设计一个信息隐藏系统时,密钥的产生、发放、管理等也必须综合考虑。不可检测性:指隐藏对象与载体对象需具有一致的特性,如具有一致的统计噪声分布等,以便使隐藏分析者无法判断对象中是否藏有嵌入对象。自恢复性:经过一些操作或变换后,可能会使隐藏对象产生较大的破坏。如果只从留下的片断数据,仍能恢复嵌入信号,而且恢复过程不需要载体信号,这就是所谓的自恢复性。当然不是所有场合都需要自恢复性。嵌入强度(信息量):载体中应能隐藏尽可能多的信息。事实上,如果理想地假设隐藏载体不会受到任何扰动,那么人们可在载体中隐藏任意多的各种不同的信息而不被察觉。当然,在保证不可感知的条件下,隐藏的信息越多,鲁棒性越差。因此,在具体的隐藏系统中通常都会涉及到不可感知性、鲁棒性和嵌入强度三者之间的折中。2.2 数字水印评估方法对于水印的稳健性,目前出现了许多专门测评水印质量的攻击软件,如剑桥大学开发的stirMark 软件就是一个典型的数字水印测试系统。该测试软件可以采用软件方法产生前面所述的多种水印攻击行为,从而在水印载体图像中引入一定的误差,但人们可以以水印检测器能否从遭受攻击的水印载体中提取或检测出水印信息来评定水印算法抗攻击的力。2.2.1 典型的攻击测评方法目前,在信息隐藏攻击方法中大多是针对数字水印技术的,因为数字水印往往对鲁棒性要求比较高,所以从另一个方面来说就是要求它具有抗攻击的能力,这样研究人员对数字水印的攻击方法也就研究得比较多。信息隐藏经常遇到的攻击方法有: 图像的压缩图像压缩算法是指去掉图像信息中的冗余量。水印的不可见性要求水印信息驻留于图像不重要的视觉信息中,即以弱信号的形式嵌入到强背景中,通常为图像的高频分量。而一般图像的主要能量均集中于低频分量上。 滤波检验图像中的水印是否具有低通特性,即低通滤波(如均值滤波和中值滤波)无法除去图像中的水印。 图像量化和图像增强一些常规的图像操作,如图像在不同灰度级上的量化、亮度与对比度的变化、直方图修正与均衡26,均不应对水印的提取和检测有严重影响。 几何失真几何失真包括图像尺寸大小变化、水平翻转、旋转、剪切、删除或增加图像线条以及反射等。很多水印算法对这些几何操作都非常脆弱,容易被去掉。因此研究水印在图像几何失真的稳健性也是人们关注的。锐化它是图像处理软件的标准功能。当一些软件进行水印嵌入时,引入了高频噪声,使用锐化攻击是非常有效的。更灵活的攻击是基于拉普拉斯算子方法进行攻击。2.2.2 常用的失真度检测方法目前常用的图像质量测试的方法是基于图像像素亮度值的。基于像素的失真度量方法属于定量量测方法,用它得到的结果不依赖于主观评价,它允许在不同的方法之间进行公平的比较。 相关系数以相关系数(Normalized Cross-Correlation,NC)29来表征水印嵌入前后图像的相似性,计算公式如下:图4 相关系数公式 信噪比信噪比(Signal-to-Noise Ratio,SNR)30,即将信号的强度与噪声的强度做比较,单位为分贝(dB),计算公式如下:图5 信噪比公式 峰值信噪比峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)30,单位为分贝(dB),计算公式如下:图6峰值信噪比公式上述公式中, y x I , , y x I , 分别表示原图和水印图像中坐标为(X,Y)的一个像素点,X,Y 分别表示行和列的像素数目。当然,一个可能成为标准的数字水印系统必须能够抵御各式各样的攻击,上述的评测标准只是其中的几个方面,如信噪比和峰值信噪比这两种度量方法在大多数情况下可以较为准确的反映出图像的视觉质量,可见数字水印的跨科学性质决定了其进展与相关学科的发展密切相关。2.3 信息隐藏技术的主要应用信息隐藏技术在实际中的应用是多种多样的,最直接的应用就是机密通信。在发信端,将待保护的信息隐藏到公开的信息中,再通过公开信道传给收信方。在收信端,根据事先约好的信息隐藏提取法从收到的信息中提取机密信息。在信息隐藏的应用领域目前信息隐藏技术在信息安全的各个领域中所发挥的作用系统地总结为: 军队和政府的一些特殊的情报机构,需要隐蔽的通讯手段。在这些部门即使对要传输的秘密信息的内容进行加密,利用现代手段仍能够对这些敏感信号进行检测并做出快速反击。基于此,军方通讯往往采用诸如发散谱调制或者大气散射等传递技术,保证信号不易于被敌方发现或者干扰。 在网上交易中,交易双方的任何一方不能抵赖自己曾经做出的行为,也不能否认曾经接收到对方的信息,这是交易系统中的一个重要环节。这可以使用信息隐藏技术中水印技术,在交易体系的任何一方发送或接收信息时,将各自的特征标记以水印的形式加入到传递的信息中,这种水印应是不能被去除的,以达到确认其行为的目的。 在数字作品的版权保护方面的应用。版权保护是信息隐藏技术中的水印技术所试图解决的一个重要问题。 防伪商务活动中的各种票据的防伪也是信息隐藏技术可以用武之地。在数字票据中隐藏的水印经过打印后仍然存在,可以通过再扫描回数字形式,提取防伪水印,已证实票据的真实性。 数据的完整性:对于数据完整性的验证是要确认数据在网上传输或存储过程中并没有被窜改。使用脆弱水印技术保护的媒体一旦被窜改就会破坏水印,从而很容易被识别。3 工具的设计与开发3.1 设计思路与规划3.1.1 目的通过VC+6.0开发一个工具,能够将文本信息通过一套算法加密后,保存到一个图片文件中去,并且该图片仍然能够正常观看,达到信息隐藏的目的。3.1.2 步骤规划1. 首先进行需求分析,确定工具的主要功能及主要界面;2. 进行概要设计,明确工具的框架结构、工作流程,对主要涉及的技术进行预研,明确需要用到的加密算法;3. 详细设计,并开始编码,实现主要功能模块;4. 完成相关功能后,对功能进行验证、测试;5 修正问题,完善功能.3.2 软件主要功能1. 能够对输入的字符串数据进行加密,加密数据保存到被选择的图片文件(或其它文件)中,图片文件能够正常观看;2. 能够将加了密的数据从加密文件中解析出来,数据正确;3. 能够将加密数据从加密文件中删除,使原来的文件恢复.3.3 流程图及界面3.3.1 数据加密流程1. 首先输入待加密的数据;2. 选择寄主文件,并以可写方式打开文件;3. 将数据通过加密算法编码;4. 将编码后的数据写入到打开的文件末尾,保存文件.图7 数据加密流程图3.3.2 数据解密流程1. 首先选择含有加密数据的文件;2. 以只读的方式打开文件,读取数据并解析,查找加密数据;3. 如果找到加密数据,进行解密,将数据显示在界面上,关闭加密文件;4. 如果未找到加密数据,提示用户,选择的文件中没有加密数据.选择文件解密数据,显示数据关闭文件,提示没有加密数据找到加密信息没有加密信息是否找到加密信息图8 数据解密流程图3.3.3 删除加密数据流程1. 选择含有加密数据的文件;2. 以读写方式打开文件,读取数据并解析,查找加密数据;3. 如果找到加密数据,记录加密数据的位置;4. 将原始文件数据写入到一个新建文件中,并保存;5. 将加密文件删除,将新保存的文件改回原文件名;6. 如果未找到加密数据,提示用户,选择的文件中没有加密数据.选择文件记录加密信息位置关闭文件,提示没有加密数据找到加密信息没有加密信息将原始文件数据保存到一个新文件中删除加密文件,将保存的文件改回原文件名是否查找到加密信息结束开始图9删除加密数据流程图3.4 主要功能代码3.4.1 加解密原理加密后的文件 原始文件数据 密码头 加密数据 密码尾图10加密原理图加密信息头、尾:由两个长度为6的数组构成,取值自定义。/加密信息头、尾unsigned char idcode_start = 0x01, 0x02, 0x03, 0xfd, 0xfe, 0xff;unsigned char idcode_end = 0xff, 0xfe, 0xfd, 0x03, 0x02, 0x01;加解密算法:加密算法采用异或法,将信息的每一个byte依次与自定义的数组计算出来的值进行异或。加解密采用同一个函数,执行两次函数,即可还原信息。/* * encode_invert * 将信息加密或解密 */unsigned char* encode_invert(unsigned char* source,int len)unsigned char astrEcodeMAXCIPHERDATA = 0;const unsigned char i_UserKey5 = 0xab, 0xbc, 0xcd, 0xde, 0xef;/异或数组if(len 0)for(int i=1;iGetDlgItemText(IDC_DATA,cipher_data);/获取editbox中的加密信息datalen = cipher_data.GetLength();if(datalen = 0):MessageBox(NULL,请在文本框中输入需要加密的信息!,提示信息,MB_OK | MB_ICONINFORMATION);return;/else if(datalen MAXCIPHERDATA)/datalen = MAXCIPHERDATA;/限制最大加密数据长度为MAXCIPHERDATAif( file.DoModal()=IDOK )CFile file_new;CString filepathname;filepathname = file.GetPathName();if(file_new.Open(filepathname,CFile:modeWrite)/为防止程序死掉,不支持大于500M的文件if(file_new.GetLength() 500*1024*1024):MessageBox(NULL,不支持大于500M的文件,请重新选择!,提示信息,MB_OK | MB_ICONINFORMATION);file_new.Close();return;/判断文件是否已经存在加密信息,为了共同decipherdlg.cpp中的find_idcode函数,先close文件,再open/unsigned char* file_codefordecipher = NULL;int cipherdatalen;file_new.Close();extern unsigned char* find_idcode(CString filename,int* cipherdatalen);file_codefordecipher = find_idcode(filepathname,&cipherdatalen);if(file_codefordecipher != NULL):MessageBox(NULL,此文件已经存在加密信息,请先删除加密信息再重新加密!,提示信息,MB_OK | MB_ICONINFORMATION);return;file_new.Open(filepathname,CFile:modeWrite);/cipher_data_encode = encode_invert(unsigned char*)(cipher_data.GetBuffer(datalen),datalen);file_new.SeekToEnd();file_new.Write(idcode_start,sizeof(idcode_start);file_new.Write(cipher_data_encode,cipher_data.GetLength();file_new.Write(idcode_end,sizeof(idcode_end);file_new.Close();:MessageBox(NULL,信息加密成功!,提示信息,MB_OK | MB_ICONINFORMATION);3.4.3 解密代码实现if(file.DoModal() = IDOK)unsigned char* file_codefordecipher = NULL;file_codefordecipher = find_idcode(file.GetPathName(),&cipherdatalen);if(file_codefordecipher = NULL)decipher_data = 对不起,选择的文件中没有经过本工具加密过的信息!;elsedecipher_data = encode_invert(file_codefordecipher,cipherdatalen);Cdecipherdlg:SetDlgItemText(IDC_DECIPHER_EDIT,decipher_data);3.4.4 删除加密信息代码实现void CEncryptionDlg:OnDelData() / TODO: Add your control notification handler code hereCFileDialog file(TRUE);if(file.DoModal() = IDOK)CFile file_decipher,file_out;unsigned char bufMAXCIPHERDATA*10 = 0;unsigned char* buf_out;int readfilelens = 0;int tempnum = 0;int cipherdatalen = 0;int startnum = 0, cipherstartnum = 0;/记录加密信息起始位置CString filepathname,filename,filepath;filepathname = file.GetPathName();filename = file.GetFileName();filepath = filepathname.Left(filepathname.GetLength() - file.GetFileName().GetLength();file_decipher.Open(filepathname,CFile:modeReadWrite);/为防止程序死掉,不支持大于500M的文件if(file_decipher.GetLength() 500*1024*1024):MessageBox(NULL,不支持大于500M的文件,请重新选择!,提示信息,MB_OK | MB_ICONINFORMATION);file_decipher.Close();return;/查找加密信息的起始位置cipherstartnumwhile(1)readfilelens = file_decipher.Read(&buftempnum,MAXCIPHERDATA*10-tempnum);if(readfilelens != MAXCIPHERDATA*10-tempnum)/文件已读完,直接查找密码头buf_out = getciphercode2(buf, readfilelens+tempnum, &cipherdatalen, &startnum);cipherstartnum += startnum;/如果文件比较大,经过一次以上的循环,起始位置需要减去tempnum(tempnum为头尾的长度之和)if(cipherstartnum MAXCIPHERDATA*10 - tempnum)cipherstartnum = cipherstartnum - tempnum;break;else/文件未读完,先按正常情况查找头尾字符buf_out = getciphercode2(buf, readfilelens+tempnum, &cipherdatalen, &startnum);if(buf_out)cipherstartnum += startnum;break;elsefor(int i=12;i0;i-)/把最后12个未处理完的字移到下一次的缓冲头部buf12-i = bufMAXCIPHERDATA*10-i;tempnum = 12;cipherstartnum += readfilelens;continue;/end elseif(buf_out)file_decipher.SeekToBegin();/创建一个临时文件,将非加密信息的内容写到这个文件中,最后保存,更名file_out.Open(filepath + tempfile.bin,CFile:modeCreate|CFile:modeWrite);unsigned char buftemp1024 = 0;int readfilelenstemp = 0;int pos = 0;/当前文件读写位置while(1)if(cipherstartnum (pos+1024)readfilelenstemp = file_decipher.Read(&buftemp,1024);file_out.Write(buftemp,readfilelenstemp);memset(buftemp,0,1024);pos = pos+1024;file_decipher.Close();file_out.Close();/删除含有加密信息的文件DeleteFile(filepathname);/将删除了加密信息的文件改回原来的文件名file_out.Rename(tempfile.bin,filename);:MessageBox(NULL,加密信息删除成功!,提示信息,MB_OK | MB_ICONINFORMATION);elsefile_decipher.Close();:MessageBox(NULL,您选择的文件中没有包含加密信息!,提示信息,MB_OK | MB_ICONINFORMATION);3.4.5 查找加密信息头、尾的代码实现/获取缓冲中的去头尾的加密数据,没找到则返回NULLunsigned char* getciphercode(unsigned char databuf, int lens, int* datalen, int *startnum)unsigned char buf_outMAXCIPHERDATA*10 = 0;unsigned char* find_idcode(CString filename,int* cipherdatalen)CFile file_decipher;unsigned char bufMAXCIPHERDATA*10 = 0;unsigned char* buf_out;int readfilelens = 0;int tempnum = 0;int startnum = 0;/用于记录加密信息的起始位置file_decipher.Open(LPCTSTR)filename,CFile:modeRead);while(1)readfilelens = file_decipher.Read(&buftempnum,MAXCIPHERDATA*10-tempnum);if(readfilelens != MAXCIPHERDATA*10-tempnum)/文件已读完,直接查找密码头buf_out = getciphercode(buf, readfilelens+tempnum, &cipherdatalen, &startnum);file_decipher.Close();return buf_out;else/文件未读完,先按正常情况查找头尾字符buf_out = getciphercode(buf, readfilelens+tempnum, &cipherdatalen, &startnum);if(buf_out)return buf_out;elsefor(int i=12;i0;i-)/把最后12个未处理完的字移到下一次的缓冲头部buf12-i = bufMAXCIPHERDATA*10-i;tempnum = 12;continue;/end elsefile_decipher.Close();return NULL;/获取缓冲中的去头尾的加密数据,没找到则返回NULLunsigned char* getciphercode2(unsigned char databuf, int lens, int* datalen, int *startnum)unsigned char buf_outMAXCIPHERDATA*10 = 0;3.5 工具开发过程中的难点与问题1.如何将加密数据从加密文件中找出来 为了能够将加密数据找回,自定义了一个加密信息头、尾,通过查找这两个信息块,确定加密信息的位置。由于数据文件中有可能存在自定义的加密信息头、尾数据,因此,自定义的加密信息头尾必须足够长,且存在一定的特殊性。应此采用了这两个数据块:unsigned char idcode_start = 0x01, 0x02, 0x03, 0xfd, 0xfe, 0xff;unsigned char idcode_end = 0xff, 0xfe, 0xfd, 0x03, 0x02, 0x01;如上所述,当文件中恰好存在上述两个信息块,就可能导致数据解析出错。2.如何查找加密信息头、尾由于读取的文件可能很大,不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 欢庆国庆学校生校内代表作文摘选7篇
- DB65T 3789-2015 围栏育肥牛场设计技术规范
- 2025纯净水购销合同书
- 《高中你好》高一开学第一课主题班会教学设计-2023-2024学年高一上学期开学主题班会
- 2025年智能电网电力系统稳定控制中的电力系统稳定性分析与优化技术创新
- 管理招聘考试试题及答案
- 管理学试题罗宾斯及答案
- 管理学试题及答案简单
- 2025年智能穿戴设备技术创新报告
- 管理学期末试题选择题及答案
- 小学科学-哪杯水热教学课件设计
- 酒店明住宿清单(水单)
- 《中国儿童维生素A、维生素D临床应用专家共识》解读
- 应用技术推广中心 报告1212
- 一级烟草专卖管理师理论考试题库(含答案)
- 小学数学《分数除法》50道应用题包含答案
- 教学第七章-无机材料的介电性能课件
- 应急值班值守管理制度
- 外国文学史-总课件
- 《中小企业划型标准规定》补充说明
- 房屋租赁信息登记表
评论
0/150
提交评论