族庫加密淺析

Revit離開族就像人缺了腿一樣,與族相關的話題自然也就非常之多。在最近幾年,在很多場合都被人問起族加密的可行性,可行的話方法是什麼。雖然我能理解很多公司或者個人想要族加密的動機只是希望能夠保護自己的知識產權,但這個實際上跟共享開源的精神是背道而馳的。這裡把一些思路講出來,具體請讀者自行根據情況選擇。

Revit的族由於Revit本身並不提供加解密方法,而且當一個Revit模型被分發之後,該模型所包含的所有族實際上都事實上「開源」了,因為拿到該模型的設計師可以很方便地將模型中的所有族另存為族文件。因此要做到完整意義上的加密實際上是一個複雜而十分繞彎的事。這裡我們講兩個思路的族加密。

第一個就是在族中加作者信息,也就是俗稱的打水印。當然打水印也有兩個層級,一種是隱性的,即打開Revit族時是看不見有傳統意義上的水印的;一種是顯性的,即打開Revit族可以看到傳統意義上的水印(比如像下圖中的"Secret")。

後一種方法雖然可以使用Revit插件自動打水印,但是在原生程序不支持的情況下很容易被刪除修改,意義不大。這裡主要講一下第一種方法,Revit API為開發者給Revit元素添加自定義數據提供了一個方法,那就是ExtensibleStorage,開發者可以通過Element的GetEntity/SetEntity方法來讀取或寫入自定義數據。由於讀取或修改需要正確的Schema,因此開發者可以通過使用ExtensibleStorage將Revit族作者信息寫入Revit族中。除非作者自己,其他人是無法知道正確的Schema的,因此也無法修改寫入族中的作者信息。

第二個思路就是真正的加密。大致的思路就是對自己創建的Revit族進行加密變成另一個文件格式,該文件格式不能通過Revit直接打開,需要用族作者提供的Revit插件進行載入,該插件會先對載入的特殊文件進行解密,然後將解密後的文件載入進Revit模型。為了防止使用者另存或導出族文件,還需要響應應用程序的DocumentSaving、DocumentSavingAs、FileExporting等事件,以確保族文件不會被導出為標準的Revit文件格式。同時還需要將Revit模型文件本身也進行加密,否則標準格式的Revit模型被發布後,其中的族文件仍然可以自由另存使用。

也可能還有其他的方法可以達到加密的目的,但總的來說,這些都是繞彎彎的方法。相對來說,如果確實很希望能給自己的族文件添加知識產權信息,個人推薦使用第一個思路的第一個方法。

推薦閱讀:

【VBA技巧】- 如何儘可能的保護VBA代碼?
WinRAR 的加密效果怎麼樣,其中加密文件名是什麼意思?
ajax post請求如何加密?
三分鐘學習 MD5

TAG:AutoDeskRevit | 加密 |