周公的专栏

执子之手,与子偕老

周金桥ID:zhoufoxcn
170548次访问,排名434好友162人,关注者195
6年的Java和.net开发经验。熟悉数据库及软件性能优化。
zhoufoxcn的文章
原创 142 篇
翻译 5 篇
转载 70 篇
评论 390 篇
周公的公告
说明:本博客示例代码自2007年以后所写的代码均是在Vs2005(.net2.0)下编写,在Vs2003(.net1.1)下可能编译不会通过。
做人要厚道,转载请注明来源于本博客!
最近评论
lavendersh:hehe
lavendersh:hao
aiyaoo:xuexi
Hatter Jiang:今天找到知音了,我也是十多年前开始接触计算机的,虽然当时只能用DOS也没有互联网,从Basic开始慢慢开始被计算机的神秘吸引,从高中开始自觉C,C++,Java,PHP,C#,HTML等等,不知道花了多少课堂,休息和晚上睡觉的时间来学习这些东西,但现在也算有些成就了,
我非常喜欢JS,当然也喜欢Java和C#,有兴趣可以交流一下,TALK:jht5945@gmail.com
Hatter Jiang:今天找到知音了,我也是十多年前开始接触计算机的,虽然当时只能用DOS也没有互联网,从Basic开始慢慢开始被计算机的神秘吸引,从高中开始自觉C,C++,Java,PHP,C#,HTML等等,不知道花了多少课堂,休息和晚上睡觉的时间来学习这些东西,但现在也算有些成就了,
我非常喜欢JS,当然也喜欢Java和C#,有兴趣可以交流一下,TALK:jht5945@gmail.com
文章分类
收藏
    相册
    .net
    mengyao||Andy 路鑫(RSS)
    The Code Project
    剑了(RSS)
    山西.net俱乐部
    张子阳(RSS)
    Java
    张森炜的博客(RSS)
    娱乐资源
    天下网
    天下网生活论坛(RSS)
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 .net程序中资源文件的保护办法探讨收藏

    新一篇: ASP.NET中常用输出JS脚本的类(改进版) | 旧一篇: 在VS2005利用NUnit进行测试

    在编写.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加密等等,这些办法当然也是可以的,我在文中并没有说只有这些办法,文中提到的办法对所有文件类型都是可以的。

    发表于 @ 2008年04月16日 14:16:00|评论(loading...)|收藏

    新一篇: ASP.NET中常用输出JS脚本的类(改进版) | 旧一篇: 在VS2005利用NUnit进行测试

    评论

    #过客 发表于2008-04-18 13:08:41  IP: 60.20.151.*
    有收获,谢谢。
    #liu_binq63 发表于2008-04-19 20:50:30  IP: 60.26.27.*
    思路不错,支持!
    #xmhero 发表于2008-04-23 23:37:52  IP: 124.72.85.*
    不错的!!!!
    #xihe 发表于2008-04-28 11:04:02  IP: 218.30.165.*
    好思路,实现有点困难
    2008-05-08 09:23:13作者回复
    我只给出了部分关键思路,其他细节问题还有一些需要考虑。
    #wanjdd2020 发表于2008-05-04 16:21:44  IP: 219.150.196.*
    很好!!!
    2008-05-08 22:19:21作者回复
    还有一些细节性的问题,限于某些我以前的某些程序采用过,出于保护的需要,没有说得太详细,请见谅。
    #xufeihz 发表于2008-05-06 13:35:55  IP: 125.120.97.*
    下载后在研究
    #出会い系サイト 发表于2008-05-17 02:07:25  IP: 124.24.238.*
    出会い出会い系サイト出会い喫茶出会い掲示板ナンパ出会いカフェ人妻出会い無料系サイト優良出会い系攻略完全無料。アダルトビデオアダルト動画アダルトアニメアダルト画像アダルトサイト無料DVDアダルト風俗サンプル無料風俗優良アダルトサイト比較海外。人妻画像人妻パラダイス知合い人妻援護会人妻コレクション風俗告白。熟女画像東京熟女掲示板動画熟女ビデオおまんこオナニーエロ画像エロフラッシュアニメエロ動画エロゲームエロ漫画無料エロサイト。エッチ画像エッチ動画エッチ小説写真エッチアニメエッチ0930。セックスアナルセックス画像セックス動画セックスフレンドスワッピング
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 周公