.net程序中资源文件的保护办法探讨
在编写.net程序(特别是WinForm时)经常会遇到一些需要加以保护的资源文件,比如一些数据库文件、图片文件等等,我们希望能被自己的程序访问,但是又不希望别人把我们辛辛苦苦收集来的数据被别人毫不费力地用于自己的程序中,在网上已经有不少朋友问到过这个问题,我也与不少朋友探讨过这个问题,今天把一些常用的做法介绍给大家,仅供参考。
图:打开调换字节顺序的word文件的情况
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个字节位置对换,这样不更改文件后缀,仍然可以实现对文件内容进行查看和修改。这种办法的缺点是对于文本型的文件,如果不进行字节调换,则没有调换的部分依然不是乱码。
程序中关键代码如下:
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;//返回调整次序后的文件字节内容
.net程序中资源文件的保护办法探讨相关推荐
- Delphi编程中资源文件的应用
Delphi编程中资源文件的应用 2008-02-03 14:08Dephi中资源文件的应用 /转自 http://chamlly.spaces.live.com/blog/cns!548f73d87 ...
- exe文件解包_如何获取别人微信小程序的源文件?
如何获取别人微信小程序的源文件? ·简单聊一下 xxxxx.wxapkg 小程序的源文件存放在哪?(当然是在微信的服务器上) ·但是在微信服务器上,用户想要获取到,肯定是十分困难的,有没有别的办法呢? ...
- [转]VB中资源文件.res的使用方法详解
在几乎所有的Windows应用程序中都拥有资源文件,这些文件定义使用应用程序将要显示很多的用户界面元素,以及提供程序所需要的各种类型数据的存储场所.资源文件在VC应用程序中应用十分广泛,在VB应用中却 ...
- Delphi中资源文件使用详解(转载)
Delphi 中资源文件使用详解 原文出处:http://blog.51cto.com/ 一.编写 RC 脚本文本 用记事本或其它文本编辑器编写一个扩展名为 ".rc" 的文件.格 ...
- Delphi中资源文件使用详解
Delphi中资源文件使用详解<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...
- Delphi 中资源文件使用详解
Delphi 中资源文件使用详解 第一篇文章: <Dephi5中资源文件的创建和使用> 几乎每个Windows应用程序都使用图标.图片.光标等资源.资源是程序的一部分,但是它是不可执行代码 ...
- Java项目中资源文件查找问题
1. 问题的提出 在学习JDBC连接时,希望采用配置文件存储信息,并在代码中读取配置文件的方式来进行驱动的注册和连接的建立.所以采用以下代码 public void connection(){try{ ...
- word文档中找不到服务器,【在WORD文件中插入excel表格,编辑保存后重新打开word文件并双击excel时提示“找不到服务器应用程序、源文件】excel整个表格不见了...
为什么PPT插入EXCEL表格时显示无法找到服务器应用程序 这是由于excel或者ppt只能兼容.低版本的ppt和excel是无法打版本excel插入的表格的. 解决如下: 1.新建一个文本,将后缀名 ...
- 关键任务应用程序依赖于故障保护存储器
关键任务应用程序依赖于故障保护存储器 Mission-critical applications depend on fail-safe memory 对于不能选择故障的关键任务应用,具有嵌入式功能的 ...
最新文章
- 卷积神经网络CNN与深度学习常用框架的介绍与使用
- 2016电大计算机网考,2016年电大-电大计算机网考题库[].doc
- [C#.NET 拾遗补漏]10:理解 volatile 关键字
- 2.[Yii]创建与设置默认控制器及载入模板
- 微服务技术发展的现状与展望
- 第 5-3 课:线程池——Executors + 面试题
- SQL的TRUNCATE和DELETE
- python qt gui与数据可视化编程 pdf_《Python Qt GUI与数据可视化编程》第13章
- 使用Eclipse开发基于SSH三大框架的Web项目带图详解
- Entity framework 配置文件,实现类,测试类
- ELK logstash的grok 自带的正则匹配
- VAssistX使用总结
- IPTV在线服务器地址,德芯IPTV网关服务器,德芯直播点播服务器
- 【error】error: failed to push some refs to ‘远程仓库地址‘ git报错解决
- 好文:读客图书董事长华楠接受采访
- 丹尼斯·里奇-c语言之父,Unix之父
- 图片切割 - 九宫格
- 模拟cmos集成电路(10)
- Cortex内核的比较(M3和M4)
- Git extensions配置