一种增强型文件加密程序设计与实现
2018-01-09王淦刘桂花王金才
王淦+刘桂花+王金才
摘要:
目前,个人信息泄露问题十分严重,对敏感和隐私数据进行加密保护是防止个人信息被窃取的有效方法。已有的成熟加密算法如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