【正文】
現(xiàn)對多邊形的處理,其中 setPoint 方法用于計算各個點的坐標。 圖 48 置亂前的 CAD 文檔 然后我們對這個文檔進行保存操作。 哈爾濱工業(yè)大學本科畢業(yè)設計(論文) 25 圖 形 恢 復點 恢 復 長 度 恢 復獲 取 加 密 信 息標 注 恢 復 文 字 恢 復存 儲 信 息提 取 實 體 信 息開 始結(jié) 束 圖 410 實體 恢復模塊流程 首先從文件中提取出實體信息和加密信息,然后針對不同的實體,進行加密操作的逆運算,例如對點坐標乘上逆矩陣。 線的恢復 在線的恢復上,是比較簡單的。然后依次對點,長度,角度進行恢復,恢復完成后,通過多邊形的形狀,利用數(shù)學計算,得到其他點的坐標。 獲 取 基 點 坐 標恢 復 坐 標獲 取 邊 長和 角 度計 算 其 余各 點 坐 標儲 存 各 點 坐 標開 始 結(jié) 束 圖 413 多邊形恢復 流程 實體恢復模塊的實現(xiàn) 由于本模塊是實體置亂模塊的一個逆過程,在實體置亂模塊已經(jīng)實現(xiàn)的基礎上, 要實現(xiàn)恢復模塊是比較容易的,主要需要考慮的是如何提取出相應的加密信息,以及如何對一些特殊情況進行處理。同樣提取出線段實體后,對于已經(jīng)進行特殊處理的線段,我們需要根據(jù)其處理方式先把它恢復。 哈爾濱工業(yè)大學本科畢業(yè)設計(論文) 26 點的恢復 在 AutoCAD 中 ,各個實體是按照順序儲存的。 哈爾濱工業(yè)大學本科畢業(yè)設計(論文) 24 圖 49 置亂后的 CAD 文檔 通過程序的運行結(jié)果,我們可以發(fā)現(xiàn),當用戶直接對程序進行保存后,將會得到一個跟原來文檔完全不一樣的一個結(jié)果,這樣,即使這個文檔通過某種人為的方式泄露出去,也不會造成巨大的損失。appendAcDbEntity()方法用于把置亂后的線段數(shù)據(jù)更 新到 CAD 文檔中。 encrypt()方法用于調(diào)用置亂算法。 哈爾濱工業(yè)大學本科畢業(yè)設計(論文) 22 + i n i t A p p ( )+ u n l o a d A p p ( )+ a c r x E n t r y P o i n t ( )D i s O r d e r A p p+ g e t E n t i t y ( )+ g e t B l o c k T a b l e ( )O p e n D B+ i s K i n d O f ( )+ o r d e r ( )+ e n c r y p t ( i n p a s s w o r d : i n t )+ a p p e n d A c D b E n t i t y ( )+ c l o s e ( )L i n e D i s o r d e r+ i s K i n d O f ( )+ e n c r y p t ( )+ s e t C e n t e r ( )+ s e t R a d i u s ( )+ a p p e n d A c D b E n t i t y ( )+ c l o s e ( )C i r c l e D i s o r d e r+ s e t T e x t S t r i n g ( )+ a p p e n d A c D b E n t i t y ( )+ c l o s e ( )+ i s K i n d O f ( )+ e n c r y p t ( )T e x t D i s o r d e r+ A c D b B l o c k R e f e r e n c e ( )+ s e t P o s i t i o n ( )+ b l o c k T a b l e R e c o r d ( )+ e n c y r p t ( )+ i s K i n d O f ( )B l o c k D i s o r d e r+ s e t P o i n t A t ( )+ a p p e n d A c D b E n t i t y ( )+ c l o s e ( )+ i s K i n d O f ( )+ e n c r y p t ( )P o l y O r d e r+ i s K i n d O f ( )+ e n c r y p t ( )+ s e t C e n t e r ( )+ s e t R a d i u s ( )+ s e t S t a r t A n g l e ( )+ s e t E n d A n g l e ( )+ c l o s e ( )A r c D i s o r d e r 圖 47 實體 置亂模塊類圖 LineDisorder 類實現(xiàn)了對線的置亂。 實體 置亂模塊的實現(xiàn) 實體 置亂模塊的程序?qū)崿F(xiàn) 實體 置亂模塊是整個系統(tǒng)的重點,也是最大的難點,在實現(xiàn)的過程中,我們付出了很大的努力。可以使用遞歸的方式來處理。塊參照指向一個塊定義,塊定義以一個塊表記錄的形式存在里面包含了實體的集合。 塊定義就是一個塊的實際存在。 因此,在處理這類圖形的時候,需要保持圖形的原有性質(zhì),系統(tǒng)才不會出現(xiàn)錯誤。 我們所需要考慮的是一些特殊情況的出現(xiàn),比如線段的 2 頂點出現(xiàn)重合哈爾濱工業(yè)大學本科畢業(yè)設計(論文) 17 現(xiàn)象。在很多情況下,兩者是有沖突的,安全性高的處理方式,難免造成處理時間上的延長,處理速度快的算法,安全性又無法得到保障。通過對 2 種方法的研究比較,最后選定了 ObjectARX 反應器來實現(xiàn)用戶監(jiān)控模塊。程序捕捉到命令,然后截斷命令的運行,然后對文檔進行 置亂操作,操作后繼續(xù)保存命令。當 一個文檔被關閉時,調(diào)用 documentToBeDeatroyed()對 文檔進行置亂操作。該類使用方法On_kInitAppMsg()在程序被 AutoCAD加載的時候,創(chuàng)建 2個反應器。針對這 2 中不同類型的操作,我們使用了 2 種反應器, AutoCAD 編輯反應器 和 AutoCAD 文檔管理反應器 在用戶打開 AutoCAD的時候,我們的程序自動加載了插件,并建立反應器。如果單純的只是進行 AutoCAD 開發(fā), ObjectARX 反應器不但實現(xiàn)了 Windows 鉤子函數(shù)中所實現(xiàn)的功能,而且還在此基礎上,進行了擴展,實現(xiàn)了許多更加直接的功能。 (3)對象反應器 AcDbobjectReactor: 對象反應器可以監(jiān)視在指定對象被更改、復制或刪除時發(fā)生的事件。使用遠程鉤子,將需要建立一個新的進程,對 AutoCAD 進程進行監(jiān)控,那么,如何通過這個進程來控制 AutoCAD 的進程,如何防止用戶通過終止進程來取消監(jiān)控,都將構(gòu)成較大的問題。 鉤子函數(shù)根據(jù)事件又可以分成以下幾種類型: (1) 鍵盤鉤子和低級鍵盤鉤子可以監(jiān)視各種鍵盤消息。簡言之,就是可以用來觀察其它進程中的某一特定線程將發(fā)生的事件。 在具體實現(xiàn)方法的選擇上,我們考慮了 2 個方法,一個是使用 Windows鉤子函數(shù),另一個是 ObjectARX 反應器。 文檔處理模塊的主要功能是對安全性較低的文檔進行處理,使其內(nèi)部的實體進行一種可逆性的轉(zhuǎn)換,使文檔信息得到保護。 實體 恢復模塊功能需求 在用戶打開文件的時候,這個文件其實已經(jīng)是經(jīng)過置亂的,如果直接返回給用戶,用戶是沒辦法得到有用的信息的。 AutoCAD 軟件產(chǎn)生的圖紙文件是 DWG 格式, DXF 是一種開放標準的矢量圖形文件,我們的系統(tǒng)通過對 DXF 文檔進行相應操作,然后轉(zhuǎn)換成 DWG格式文件。 我們力求令整個系統(tǒng)的工作對用戶都是透明的,用戶在使用軟件的過程中,甚至感受不到文件正在被加密解密。 篡改提醒通過對文檔內(nèi)部實體元素進行一種不可逆的映射,通過比較映射關系,可以很有效的文檔是否被他人惡意修改。同時還不應該破壞文檔本身的內(nèi)容,通過解密操作,可以使文檔得以還原。通過以下三種方式為用戶的設計數(shù)據(jù)提供安全保護:驗證、訪問控制和加密 [3]。從保護強度上來說,針對主流文檔編輯軟件的密碼保護功能,相應的破解工具可以輕易的獲得。 但是隨著 AutoCAD 軟件在各領域的廣泛使用,一些問題也開始逐漸出現(xiàn),其中最突出的就是文檔保護問題。 AutoCAD 軟件是 Autodesk 在軟件行業(yè)的第一場革命, AutoCAD 軟件享有廣泛的聲譽,它將制圖帶入了個人計算機時代 [1]。 作者簽名: 日 期: 學位論文原創(chuàng)性聲明 本人鄭重聲明:所呈交 的論文是本人在導師的指導下獨立進行研究所取得的研究成果。 本文所論述 CAD 文檔保護系統(tǒng)置亂模塊,就是通過對 CAD 文檔中各種實體進行一種可逆變換,令 CAD 文檔脫離特定環(huán)境后可以隱藏其真實信息,從而起到保護作用。但是隨著 AutoCAD 的廣泛應用,許多問題也 逐漸凸現(xiàn)出來,其中尤為突出的就是文檔保護問題。 關鍵詞 CAD;文檔保護;置亂 ; 加密算法 Abstract As a good industrial mapping software, AutoCAD has been extremely wide range of applications. However, with the extensive application of AutoCAD, many of the problems highlighted by gradually, which is particularly striking is that the document protection issues. As we all know, every one of the drawings are the wisdom of engineers, and the pany39。本人完全意識到本聲明的法律后果由本人承擔。使得中國在數(shù)字化工程設計上的設計效率普遍提高。但是一直以來都缺少一些行之有效的手段來對這些文件進行保護。即使實現(xiàn)了部分權(quán)限管理功能的最新版本的 MS OfficeWord,其權(quán)限管理功能也十分容易破解。 (2) 密碼控制 —— 通過設定密碼來保護文檔,市面上存在很多密碼破解程序,通過這些軟件,可以在很短的時間內(nèi)破解由數(shù)字、字母構(gòu)成的密碼。雖然已經(jīng)有了一些加密軟件,但是總體效果并不是十分理想,破解方法比比皆是。用戶只有在特定的環(huán)境下,才可以對文檔解密成功。通過本模塊,系統(tǒng)可以捕捉到用戶 的操作,在進行相應操作的時候系統(tǒng)進行相應的 處理。并將置亂過程中所用到的輔助信息存儲起來。因此我們的系統(tǒng)通過用戶監(jiān)控模塊來對用戶的行為進行監(jiān)控,然后調(diào)用其它的相關模塊對 CAD 文檔進行保護工作。然后還給出了系統(tǒng)的一個整體框架,以方便理解我們系統(tǒng)的工作原理。通過 “ 鉤掛 ” ,您可以給Windows 一個處理或過濾事件的回調(diào)函數(shù),該函數(shù)也叫做 “ 鉤子函數(shù) ” ,當每次發(fā)生您感興趣的事件時, Windows 都將調(diào)用該函數(shù) [7]。監(jiān)測 “ 系統(tǒng)范圍事件 ” 的系統(tǒng)鉤子特別明顯。比如啟動和關閉應用程序。 ObjectARX 反應器 ObjectARX 中的 ARX 表示 AutoCAD 的運 行時擴展( AutoCAD Runtime eXtension )。 從上述分類中,我們不難發(fā)現(xiàn), ObjectARX 反應器跟 Windows 鉤子函數(shù)有著很大的區(qū)別。這樣,大大降低了我們的編程難度。 文檔管理 反應器 AcApDocManagerReactor用于 監(jiān)視在 MDI模式下圖形文檔窗口事件,例如打開、關閉、切換圖形文檔等等。方法 mandWillStart()用于 在一條命令被執(zhí)行前,截斷命令,并進行相應操作。加載成功后,在命令行窗后中會出現(xiàn)加載成功的提示,同時分別創(chuàng)建了 2 個反應器,結(jié)果哈爾濱工業(yè)大學本科畢業(yè)設計(論文) 13 如圖 33 所示。在發(fā)出此條命令后,被程序截獲,顯示準備保存文檔。 哈爾濱工業(yè)大學本科畢業(yè)設計(論文) 15 第 4章 實體 置亂和恢復模塊 實體置亂模塊的設計 本部分是系統(tǒng)的一個比較關鍵的部分,通過對 CAD 圖紙內(nèi)各種實體,如點,線,多邊形等進行置亂變換,來破壞原有圖紙的信息,從而起到保護作用。完成后,將矩陣的元素分配到各個點中。處理過程如圖 43 所示。我們所能做到的是提高數(shù)字精度,精確到小數(shù)點后的 10 位,這樣就可以最大程度上的減少誤差。 塊參照是對塊定義的引用。 我們首先將塊里面的實體單獨提取出來,對每個實體進行單獨置亂。 我們考慮了使用取模的方法來進行處理 ,但是要判斷一個坐標是否是一個超出邊界的坐標,需要設定一個標志位來進行判斷,這樣加大了存儲空間。卸載程序時,調(diào)用 unloadApp()方法,對刪除各個類的注冊。 encrypt()方法用于調(diào)用置亂算法,對分組后的直線進行置亂處理。 TextDisorder 類用于對文字進行處理。 setPosition()方法用于對塊參照的整體進行置亂操作。在實體置亂模塊中,我們針對每一個實體,進行 了可逆的變換,同時存儲了相應的加密信息。然后把矩陣的元素恢復成正確順序,然后分配到相應的點中去,然后就可以顯示正確的圖形。具體流程如圖 412 所示