在编写.net程序(特别是WinForm时)经常会遇到一些需要加以保护的资源文件,比如一些数据库文件、图片文件等等,我们希望能被自己的程序访问,但是又不希望别人把我们辛辛苦苦收集来的数据被别人毫不费力地用于自己的程序中,在网上已经有不少朋友问到过这个问题,我也与不少朋友探讨过这个问题,今天把一些常用的做法介绍给大家,仅供参考。

办法一、作为嵌入式资源
采用这种办法的优点是资源文件做成整个可执行文件的一部分了,优点是不同反编译等手段,无法获知程序的内部情况,缺点是因为已经嵌入到exe中了,所以无法对嵌入的文件做内容上的修改。

图:打开调换字节顺序的word文件的情况
 
办法四、对文件字节进行补运算
实践证明:对一个字节变量b,以下操作横成立:~(~b)=b,利用这个原理我们可以对文件的字节值进行位操作来保护,我们可以将原始文件的字节值进行一次~运算,将加密后的文件字节内容随同软件一同发布,在需要查看和修改文件的时候,再对文件进行一次~运算就可以了。这种方法的优点要知道文件内容只需要对文件逐字节进行~运算就可以了,缺点是一旦被人知道此种加密方式,懂得一点编程的人就可以对文件内容复原。
程序中关键代码如下:
//下面的循环实现对文件内容逐字节进行求补运算 
                        for (int i = 1; i < fileLength; i++) 
                        { 
                                source[i] = (byte)(~source[i]); 
                        } 
                        return source;
总结:以上各种方式各有优缺点,需要根据的最终用户的计算机水平来确定什么保护方法。
办法二、改文件后缀
我问过不少朋友,有些使用过这种办法,因为一般来说一种文件后缀对应一种编译或者查看的工具,例如.mdb通过Access可以查看和修改,.txt可以通过记事本查看和修改,如果我们把一个txt文件的后缀改成.mdb,那么双击后系统会用Access打开文件,结果自然是乱码,如果我们不理会文件后缀,仍然以记事本打开则仍然可以正常查看和编辑。也就是我们更改文件后缀达到误导系统用错误的方式打开的目的。也有些朋友甚至干脆不用文件后缀,这样就让操作系统无所适从了。这种方法的优点是知道文件的实际格式后可以对文件进行查看和修改,缺点是常用的文件后缀不多,遇上有心人可以尝试通过更改文件后缀的办法来获取文件内容的办法,这种几率还是比较大的。
办法三、对文件的字节顺序进行调整
这种办法是我今天要重点介绍的一种办法。几年前我参与过一个OA系统的开发,里面有一个环节就是如何保证以Word形式保存的合同、审批申请不会被篡改。我当时的做法就是Word文件分段存储,也就是将整个文件头20个byte存放到数据库,剩余字节仍然以Word文档的方式存储到硬盘上,这样别人通过正常办法打开Word文件时看到的乱码,一旦需要调看文件时,再通过程序将头20字节和本地存储的文件的内容合并成一个完整的Word文档。后来我嫌利用数据库存储麻烦,将这种办法改进了一下,将文件的前n个字节与后n个字节位置对换,这样不更改文件后缀,仍然可以实现对文件内容进行查看和修改。这种办法的缺点是对于文本型的文件,如果不进行字节调换,则没有调换的部分依然不是乱码。
程序中关键代码如下:
FileStream stream = fileInfo.OpenRead(); 
                     byte[] total = new byte[fileLength];//存储文件内容的字节数组 
                     stream.Read(total, 0,fileLength); 
                     stream.Close(); 
                     byte tempByte;//用于交换文件字节的数据 
                     //下面的循环实现文件的首字节与文件的尾字节对换 
                     //文件的第二字节与文件倒数第二字节对换 
                     //假设文件的字节长度为length,那么对换字节的索引n,m满足:n+m=length-1 
                     //也就是n=length-m-1 
                     for (int i = 0; i < byteLength; i++) 
                     { 
                            tempByte = total[i]; 
                            total[i] = total[fileLength - 1 - i]; 
                            total[fileLength - 1 - i] = tempByte; 
                     } 
                     return total;//返回调整次序后的文件字节内容 
 
说明:完整源代码请到http://download.csdn.net/source/417558下载。下载到的压缩包中包含了程序源文件和编译成功的可执行文件。
说明:有朋友提出了其它办法,比如对文本型文件进行DES加密等等,这些办法当然也是可以的,我在文中并没有说只有这些办法,文中提到的办法对所有文件类型都是可以的。
本文转自周金桥51CTO博客,原文链接:http://blog.51cto.com/zhoufoxcn/166031 ,如需转载请自行联系原作者

.net程序中资源文件的保护办法探讨相关推荐

  1. Delphi编程中资源文件的应用

    Delphi编程中资源文件的应用 2008-02-03 14:08Dephi中资源文件的应用 /转自 http://chamlly.spaces.live.com/blog/cns!548f73d87 ...

  2. exe文件解包_如何获取别人微信小程序的源文件?

    如何获取别人微信小程序的源文件? ·简单聊一下 xxxxx.wxapkg 小程序的源文件存放在哪?(当然是在微信的服务器上) ·但是在微信服务器上,用户想要获取到,肯定是十分困难的,有没有别的办法呢? ...

  3. [转]VB中资源文件.res的使用方法详解

    在几乎所有的Windows应用程序中都拥有资源文件,这些文件定义使用应用程序将要显示很多的用户界面元素,以及提供程序所需要的各种类型数据的存储场所.资源文件在VC应用程序中应用十分广泛,在VB应用中却 ...

  4. Delphi中资源文件使用详解(转载)

    Delphi 中资源文件使用详解 原文出处:http://blog.51cto.com/ 一.编写 RC 脚本文本 用记事本或其它文本编辑器编写一个扩展名为 ".rc" 的文件.格 ...

  5. Delphi中资源文件使用详解

    Delphi中资源文件使用详解<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  6. Delphi 中资源文件使用详解

    Delphi 中资源文件使用详解 第一篇文章: <Dephi5中资源文件的创建和使用> 几乎每个Windows应用程序都使用图标.图片.光标等资源.资源是程序的一部分,但是它是不可执行代码 ...

  7. Java项目中资源文件查找问题

    1. 问题的提出 在学习JDBC连接时,希望采用配置文件存储信息,并在代码中读取配置文件的方式来进行驱动的注册和连接的建立.所以采用以下代码 public void connection(){try{ ...

  8. word文档中找不到服务器,【在WORD文件中插入excel表格,编辑保存后重新打开word文件并双击excel时提示“找不到服务器应用程序、源文件】excel整个表格不见了...

    为什么PPT插入EXCEL表格时显示无法找到服务器应用程序 这是由于excel或者ppt只能兼容.低版本的ppt和excel是无法打版本excel插入的表格的. 解决如下: 1.新建一个文本,将后缀名 ...

  9. 关键任务应用程序依赖于故障保护存储器

    关键任务应用程序依赖于故障保护存储器 Mission-critical applications depend on fail-safe memory 对于不能选择故障的关键任务应用,具有嵌入式功能的 ...

最新文章

  1. 卷积神经网络CNN与深度学习常用框架的介绍与使用
  2. 2016电大计算机网考,2016年电大-电大计算机网考题库[].doc
  3. [C#.NET 拾遗补漏]10:理解 volatile 关键字
  4. 2.[Yii]创建与设置默认控制器及载入模板
  5. 微服务技术发展的现状与展望
  6. 第 5-3 课:线程池——Executors + 面试题
  7. SQL的TRUNCATE和DELETE
  8. python qt gui与数据可视化编程 pdf_《Python Qt GUI与数据可视化编程》第13章
  9. 使用Eclipse开发基于SSH三大框架的Web项目带图详解
  10. Entity framework 配置文件,实现类,测试类
  11. ELK logstash的grok 自带的正则匹配
  12. VAssistX使用总结
  13. IPTV在线服务器地址,德芯IPTV网关服务器,德芯直播点播服务器
  14. 【error】error: failed to push some refs to ‘远程仓库地址‘ git报错解决
  15. 好文:读客图书董事长华楠接受采访
  16. 丹尼斯·里奇-c语言之父,Unix之父
  17. 图片切割 - 九宫格
  18. 模拟cmos集成电路(10)
  19. Cortex内核的比较(M3和M4)
  20. Git extensions配置

热门文章

  1. VS 条件断点学习总结2
  2. VC2019消息框编程总结
  3. spring 源码阅读入门
  4. 图解windbg查看Win7结构体
  5. 如何生成动态库 .dll 的符号 .lib 文件?
  6. Kafka 0.10.0文档翻译二
  7. MyEclipse数据库连接配置(以Oracle为例)
  8. Sublime Text 3在ubuntu12.10下无法中文输入的解决方案
  9. 在vs2005中安装boost库
  10. 形态数轴的单点多值现象