.net程序中资源文件的保护办法探讨
生活随笔
收集整理的這篇文章主要介紹了
.net程序中资源文件的保护办法探讨
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在編寫.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程序中资源文件的保护办法探讨的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rabbitmq 集群数据存储与单点故障
- 下一篇: /usr/bin被删除的操作