王淦+劉桂花+王金才
摘要:
目前,個人信息泄露問題十分嚴重,對敏感和隱私數據進行加密保護是防止個人信息被竊取的有效方法。已有的成熟加密算法如AES及RSA等均面向大規模應用,其算法較為復雜,運行開銷也較大。對個人數據而言,可以運用密碼學基本原理設計并實現簡單的文件加密器對其進行保護。然而,現有的一些文件加密程序過于簡易,有的程序甚至在實現上存在漏洞,在時間和資源充足的條件下容易被破解或恢復。設計并實現了一種增強型的文件加密程序,加解密均可用同一程序實現,并可安全高效地對任意類型的文件進行加解密。實驗結果顯示,該程序能準確地對文件進行加解密,且執行效率高,實用性強。
關鍵詞:信息安全;數據保護;文件加解密
DOIDOI:10.11907/rjdk.172115
中圖分類號:TP309.7
文獻標識碼:A 文章編號:1672-7800(2017)012-0194-03
Abstract:At present, the leakage of personal information is very serious. Encrypting sensitive and private data is an effective method to prevent personal information from being illegal leaked and obtained. Existing mature encryption algorithms, such as AES and RSA, are oriented to large-scale applications, their algorithms are more complex and their operating costs are relatively large. For our personal data, we can design and implement and small-scale file encryptor using basic principles of cryptology. However, some of the existing programs are too simple and some of them even have bugs in implementation. These programs are easy to be broken and recovered.In this paper, we designed and implemented an enhanced file encryptor with the same program in encryption and decryption. This program can safely and efficiently encrypt and decrypt any type of files. The experimental results show that this program can encrypt and decrypt accurately, and its implementation efficiency is very high, and can be applied to actual situations.
Key Words:information security; data protection; file encryption and decryption
0 引言
當前,互聯網個人信息泄露問題已經非常嚴重。據統計,78.2%的網民個人身份信息曾被泄露,包括姓名、家庭住址、身份證號及工作單位等[1]。通常采用兩種方法防止信息泄露:一是做好敏感和隱私數據的保護工作,防止信息被盜取;二是對敏感和隱私數據進行加密,即使萬一泄露也不會被非法讀取。事實上,想要完全做到數據的保護十分困難,因此對敏感和隱私數據進行加密顯得尤為重要。
標準化的加密算法如AES、RSA等是面向大規模應用的,其算法比較復雜,運行開銷也較大,并不適用于日常個人信息的保護。本文運用密碼學的基本原理,自行設計并實現了一種簡單、高效的加密算法來保護網民的個人信息。
已有的一些加密程序設計過于簡易,有的程序對用戶輸入的密鑰長度沒有任何限制,且讀取密鑰后未進行任何處理即直接用于加密。用戶輸入的密鑰長度過短將很難抵抗統計攻擊,直接用原始密鑰加密則容易暴露密鑰的內在規律性。此類算法在時間和資源充足的條件下容易被破解。本文提出的算法對用戶輸入的密鑰有最短長度限制,同時對原始密鑰進行置換后才作為加密密鑰使用。為進一步增強加密強度,在加密過程中引入8位白化密鑰,使加密后的數據更難以破解。此外,現有的一些程序在實現上存在漏洞,例如有的程序加密完成后,直接通過系統調用將原始文件刪除,而通過常用的數據恢復軟件很容易將已刪除的文件還原出來,進而得到原始文件數據。本文提出的程序在加密完成后,通過隨機填充的方式將原文件徹底覆蓋后再進行刪除,從而保證了數據安全性。
C語言是廣泛應用的一種編程語言,它具有使用靈活方便、目標程序效率高、可移植性好等優點,適合于編寫系統軟件[6]。本算法通過C語言實現,在Windows平臺下編譯通過并成功運行。
1 算法設計
本程序主要分為3大模塊:預處理模塊、加解密模塊與后處理模塊。
預處理模塊主要進行加密前的準備工作,其主要流程為:①讀取用戶輸入的需要加密的文件名,檢查是否正確,如不正確給出錯誤提示;②建立臨時文件以備加解密模塊使用,如創建失敗,則給出錯誤提示并終止程序;③讀取用戶輸入的密碼,檢查長度是否符合要求,如不符合則提示重新輸入。endprint
加解密模塊是程序的核心模塊,其主要流程為:①對用戶輸入的密碼(也即密鑰)按一定規則進行置換,目的是打亂用戶輸入密碼中各字符之間的規律性,使密鑰更加隨機;②設置白化密鑰,長度為8bit,目的是進一步增加密鑰隨機性并增強加密強度,使加密后的文件更難被破解;③逐個字節讀取要加密的文件內容,將此字節與加密密鑰及白化密鑰異或,以達到加密目的,直至文件末尾,其中加密密鑰根據用戶輸入的長度循環使用。
后處理模塊主要負責清理工作,其主要工作為:①以1 024字節為單位生成隨機數據并填充進原文件,以達到覆蓋原文件的目的,此過程重復進行3次,確保原文件數據被完全覆蓋,無法恢復;②將隨機填充覆蓋后的原文件直接刪除(不經回收站),由于刪除前已進行了3遍隨機覆蓋,因此即使利用數據恢復軟件將已刪除的文件還原,也無法讀取其原始內容;③將臨時文件重命名為原文件名。
2 編程實現
2.1 原始密鑰置換
2.2 加密實現
加密過程為利用C語言的文件操作函數逐字節讀取要加密的文件內容,將此字節與加密密鑰及白化密鑰異或,直至文件最后一個字節。其中加密密鑰根據用戶輸入的長度循環使用,例如,若用戶輸入密鑰長度為6,則加密第7個字節時所用密鑰與第1個字節相同。以此類推,加密第6n+1個字節與加密第1個字節所用密鑰相同,其中n為整數。為保證加密強度,本程序強制要求用戶輸入的密鑰不得少于6個字符。同時,根據實際應用情況考慮,限制長度不多于18個字符。本部分實現代碼如下,其中01010001為指定的白化密鑰,可根據需要進行修改。
2.3 刪除實現
加密完成后需要刪除原始文件,如果對原始文件不加處理直接刪除,則利用常見的數據恢復軟件如Easy Recovery、Final Data等很容易將已刪除的文件還原,進而獲取原始文件,如此加密便毫無意義。為防止這種情況發生,本程序在刪除原始文件前,利用隨機產生的垃圾數據以1 024字節為單位對原始文件填充覆蓋3遍,以保證即使文件被還原也無法獲取其原始內容。本部分實現代碼如下:
2.4 程序執行實例
以下是本程序執行實例截圖。圖1為程序運行時的界面,圖2為原始文件,圖3為加密后的文件,圖4為解密后的文件。從實例中可以看出,本程序準確實現了加解密運算,解密后的文件和原始文件完全相同,對于段落中的空格、換行和字母上方的標注符號以及·等特殊符號均能準確進行加解密。
3 程序執行效率分析
考慮到實際應用情況,選取100kB大小(約5萬字符)與1MB大小(近40萬字符,相當于一本普通書籍的字數)的文本文檔和6MB大小圖片(約為常用專業相機拍攝照片的大小)的文本文檔進行加解密實驗,實驗環境為3.30GHz CPU,4GB內存,64位Windows 7家庭版操作系統,編譯環境為Visual C++6.0。實驗結果如表1所示。
由實驗結果可以看出,本程序執行加解密速度非常快,對于6MB左右的常見圖片文件,加解密平均僅需約150ms。此外,對于120MB左右的視頻文件也進行了加解密實驗,所需時間大約為2.4s,也在可接受的范圍內。
4 結語
針對現有一些文件加密程序存在的問題和缺陷,本文提出并實現了一種增強型的文件加密程序,能夠有效地對各種類型的文件進行加解密,并增強了加密強度,實現了對原始數據的徹底清除。下一步工作是實現對批量文件的加解密,或者對滿足指定條件的文件進行自動掃描并加解密。
參考文獻:
[1] 新華網.中國網民個人信息泄露問題嚴重,保護之網亟待編織 [EB/OL]. http:∥news.xinhuanet.com/yuqing/2016-05/17/c_128989867.htm, 2016.
[2] 鄭紅艷.文件加密方法探析[J].軟件導刊,2008,7(8):198-199.
[3] 俞敏.基于C語言的文件加密與解密程序的實現[J].電腦編程技巧與維護,2016(13):24-25,51.
[4] 王樹斌,趙楊杰.文件加密算法實現[J].電腦知識與技術,2014,10(12):2730-2731.
[5] 余笑軒,余臘生.一種基于Caesar密碼的數據加密算法的研究[J].計算機安全,2013(4):57-60.
[6] 譚浩強.C程序設計[M].第4版.北京:清華大學出版社,2010.
[7] 裴要強,孟波.Windows黑客技術揭秘與攻防—C語言篇[M].北京:中國鐵道出版社,2010.
[8] WILLIAM STALLINGS. 密碼編碼學與網絡安全-原理與實踐[M].第6版.唐明,李莉,杜瑞穎,等,譯.北京:電子工業出版社,2015.
(責任編輯:黃 健)endprint