摘 要:以VB編程語言為基礎,以Access數據庫管理及AES加密算法為加密技術核心,采用登錄驗證、二次驗證、增強加密、硬件信息加密、數據備份、軟件加殼、文件校驗等多種保障措施最大限度的實現對用戶賬號及相關信息的安全存儲功能,從而解決了賬號信息不能安全存放和不方便檢索的問題。
關鍵詞:AES;加密數據;計算機敏感信息
中圖分類號:TP309 文獻標識碼:A 文章編號:1674-7712 (2014) 14-0000-02
一、總體設計框架
本軟件的設計框架以數據安全為主線,設計一套可以放心存儲賬號等數據信息的加密存儲方案。簡要說明一下本設計的系統框架。(1)AES加解密部分:包括賬號數據、小冊子數據、文件校驗信息、用戶信息等一系列信息的加解密工作,這是軟件加密功能的核心;(2)賬號管理部分:負責賬號的增、刪、改、查,賬號批量管理,分類的添加和刪除等一系列對賬號的操作;(3)小冊子管理部分:軟件附帶的一個加密記事本,本模塊主要負責小冊子的增、刪、改、查工作;(4)MD5碼(Message Digest Algorithm 5,消息摘要算法第五版)校驗部分:主要負責文件、文本的MD5碼值的生成,以及程序的完整性校驗工作;(5)公共變量及函數部分:存放模塊間通用的變量、常量、函數等;(6)背景數據部分:主要包括背景圖片、背景提示音等。
軟件窗體間關系是:當程序啟動時會最先加載frmLoadingApp窗體,主要負責提示軟件的加載進度。軟件初始化完畢后,frmLogin用戶登錄窗體便會顯示,同時frmSystray托盤圖標控制窗體也會加載,此時系統托盤會顯示軟件托盤圖標。當用戶登錄時,frmSecCheck窗體會被激活,該窗體主要負責密碼驗證次數及錯誤達到指定次數后的等待時間控制。
用戶成功登錄后,frmMain主窗體會被加載顯示。同時,軟件會根據用戶配置判斷是否加載frmNotify彈窗窗體,該窗體主要負責報告軟件數據庫當前的狀態。之后,根據用戶的不同選擇會加載顯示其他不同功能的窗體。
Access數據庫以其小巧、方便、易用、可移植性強等優勢一直被用來作為PC上小型數據庫的首選。本設計就采用Access數據庫來存儲數據,通過VB自帶的MSADODC.OCX控件來具體地對數據庫進行操作和管理。數據庫包含4個表:軟件配置表、分類表、數據表和數據回收表。程序在操作數據時分3步實現:連接數據庫、數據操作、關閉數據庫連接。其中,連接數據庫和關閉數據庫連接由通用函數實現,減少程序中連接和斷開數據庫操作時的重復代碼。
二、關鍵部分設計
(一)軟件啟動及用戶登錄流程
軟件啟動過程可以分為8個步驟——檢查是否重復啟動、加載啟動進度界面、檢查文件完整性、檢查目錄完整性、檢查數據庫完整性和讀取軟件配置信息、加載登陸界面和加載托盤圖標。該過程不僅驗證用戶身份是否合法,而且在驗證通過后還會讀取當前賬號統計信息、用戶登錄統計信息、數據庫狀態信息等,同時還會生成AES加解密時用到的密鑰,該密鑰同樣經過MD5單向加密算法加密。一切就緒后,軟件的主窗體才會被加載。
(二)賬號管理及檢索
賬號管理功能可以分為5個子功能:添加賬號、修改賬號、刪除賬號、瀏覽賬號及批量管理。除了刪除賬號和批量管理外,其他三個功能都會牽涉到AES加解密的問題。對于這三個功能,這里要重點討論。
1.添加賬號:流程主要注意的是在“保存數據到數據庫”過程中若用戶啟用了“增強加密”功能則會以增強密碼作為密鑰為密碼和備注加密保存,否則加密密鑰采用軟件默認加密密碼。
2.修改賬號:該流程中的“加載賬號信息”過程中若賬號未使用“增強加密”功能則需要使用默認加密密碼對密碼和備注進行解碼方可正常顯示。
3.刪除賬號:從用戶選擇的賬號中獲得特征碼,然后從數據庫中刪除對應特征碼的賬號即可。
接著著重分析增強加密部分以及為何能保證數據能安全存儲。
如圖1所示為數據采用默認加密密鑰存儲的過程框圖,該功能主要為了不使賬號存儲時頻繁的輸入加密密碼而設置的。當然,即使不使用“增強加密”功能,存儲的賬號信息也是經過加密后存儲的,而不是直接存儲明文在數據庫中。
圖2所示為使用“增強加密”功能對數據進行加密的框圖。整個流程如下:(1)用戶輸入自定義的加密密碼A;(2)在密碼A中附加上硬盤序列號等信息后再經過一次MD5加密得到數據加密密鑰B;(3)使用密鑰B對數據進行加密后再存儲到數據庫中;(4)在密鑰B中附加上硬盤序列號等信息后再進行一次MD5加密后得到存儲密鑰C;(5)將密鑰C存儲到數據庫中,整個存儲過程完成。最值得說明的是,數據加密的密鑰同樣也不采用明文存儲,而是采用MD5單向加密后存儲在數據庫。因此,若是用戶遺忘了加密密碼,則原則上永遠無法解密。
圖3所示為經過增強加密的數據的解密過程框圖。若用戶輸入的密碼不是正確的密碼,雖然也能對數據進行解密,但解密后的數據并不是正確的數據,
而是一堆的亂碼。至于判斷是否正確的解密,則根據加密時的算法進行一系列的運算得到校驗密碼,然后再用其與存儲在數據庫中的存儲密鑰進行比對,若相同,則說明正確解密了。需要補充說明的是,由于加密的密鑰中加入了硬盤序列號,因此即使軟件及數據被非法復制到別的電腦中也無法解密。
(三)數據備份功能
數據備份主要分為下面三個功能:(1)覆蓋備份:功能實現的是用當前數據庫(下稱“DB”)直接替代備份數據庫(下稱“DB2”);(2)覆蓋還原:則實現由備份數據庫直接替代當前數據庫;(3)備份同步:功能可以實現當前數據庫數據與備份數據庫數據同步。
整個同步數據表的流程的設計思路如下:首先,將備份數據庫的數據表的記錄全部轉移到賬號回收表。然后,從當前數據庫逐條讀取記錄(記錄A),依次與DB2回收表中的記錄(記錄B)對比,若存在相同特征碼的記錄則繼續對比記錄的日期編輯碼,若記錄A的較新則直接將記錄A添加到DB2的數據表,刪除記錄B;若記錄B的較新,則直接將記錄B還原到DB2的數據表,忽略記錄A。其它表的同步與數據表的思路類似。
(四)背景數據封裝方法
背景數據包括背景圖片、背景音效等資源文件。若將這些數據以外部文件的形式存儲在文件夾中,則有可能會被用戶私自改動;若將這些數據以資源的形式存儲在程序中,則會使得生成的可執行文件太大。因此,將這些文件封裝到一個特定的文件中,使用時從其中提取出來再使用就解決了前面說到的問題。在這里,本設計將涉及DLL(Dynamic Link Library,動態鏈接庫)文件編寫的技術。
在VB6.0中只能創建ActiveX DLL,這種DLL文件不是標準DLL文件,而是一種COM(Componet Object Model,組件對象模型)組件,這種DLL必須要先在系統中注冊才能被程序調用。
將圖片封裝到ActiveX DLL文件的思路:首先創建資源文件,將圖片等添加到資源文件中,然后在創建的ActiveX DLL中添加資源文件,最后創建類模塊并在其中編寫資源調用函數。
DLL制作步驟:(1)打開VB6,創建ActiveX DLL工程(創建后會自動添加一個類模塊Class1);(2)打開VB資源管理器,添加位圖文件后保存;(3)打開Class1類模塊,編寫讀取資源的函數;(4)生成DLL文件(最好設置下工程名,引用時方便查看)。讀取資源相關函數有LoadResString、LoadResPicture、LoadResData等。
從DLL讀取數據:(1)在新的工程(要調用剛生成的DLL)中,引用剛生成的DLL(工程>>引用>>瀏覽>>找到那個DLL后加入引用);(2)獲取從DLL圖片。
DLL注冊可以在程序中調用“Shell”函數執行注冊命令也可以在程序外部寫批處理文件使用組件注冊命令。
(五)軟件文件校驗
軟件文件校驗也就是對軟件的關鍵的文件(如程序主文件、背景數據文件等)進行MD5碼校驗,以確保軟件不被非法修改(破解)。MD5碼不能固化在程序主文件中,因為生成主文件后其MD5碼值會改變,因此可以使用外部程序生成單一的MD5碼存放文件。在程序啟動時,通過校驗函數讀取MD5碼存放文件中的數據進行關鍵文件校驗。注意:文件中的數據要經過AES加密,同時加密前數據格式可以為“文件名|MD5碼[回車]”的格式。
三、結束語
本設計基于AES加密算法的最高加密等級(AES-256)開發設計,此外還加入了用戶登錄認證、增強加密、數據備份等等措施最大限度的保障賬號信息的安全。
參考文獻:
[1]劉晗嘉.AES加密算法IP核的設計與驗證[D].上海交通大學,2009.
[2]閆庚哲.基于AES加密的Windows Socket網絡通信實現[J].微處理機,2014(03):14-17.
[3]苗杰,錢強,高尚.基于AES加密算法的數據庫二級密鑰技術[J].計算機系統應用,2013(04):79-82.
[4]王小偉.AES加密算法的研究與IP核設計實現[D].哈爾濱工業大學,2013.
[5]王亮.針對AES加密算法的研究及其FPGA實現[D].上海師范大學,2013.
[作者簡介]王江(1975.06-),男,陜西鎮安人,中級職稱,研究方向:計算機。