当前个人信息泄露已经成为了非常严重的问题,对于个人信息的隐私是一种侵犯,只有对隐私数据进行加密保护才可以防止个人信息被窃取。如今成熟的加密算法都已经得到了大规模的应用,其算法也相对较为复杂,开销也很大。对个人数据而言,可以应用密码学进行简单保护,现有的一些文件加密程序过于简单,很容易被破解,造成个人信息泄露,在时间和资源充足的条件下容易被破解或恢复。只有设计并实现了一种增强型的文件加密程序,加解密均可用同一程序来完成,并可安全高效地对任意类型的文件进行加解密。实验结果显示,增强型的文件加密程序能准确地对文件进行加解密,且执行效率高,实用性强。
关键词:信息安全,数据保护,文件加解密
当前,互联网个人信息泄露问题已经非常严重。据统计,78.2%的网民个人身份信息曾被泄露,包括姓名、家庭住址、身份证號及工作单位等[1]。通常采用两种方法防止信息泄露:一是做好敏感和隐私数据的保护工作,防止信息被盗取;二是对敏感和隐私数据进行加密,即使万一泄露也不会被非法读取。事实上,想要完全做到数据的保护十分困难,因此对敏感和隐私数据进行加密显得尤为重要。
标准化的加密算法如AES、RSA等是面向大规模应用的,其算法比较复杂,运行开销也较大,并不适用于日常个人信息的保护。本文运用密码学的基本原理,自行设计并实现了一种简单、高效的加密算法来保护网民的个人信息。
已有的一些加密程序设计过于简易,有的程序对用户输入的密钥长度没有任何限制,且读取密钥后未进行任何处理即直接用于加密。用户输入的密钥长度过短将很难抵抗统计攻击,直接用原始密钥加密则容易暴露密钥的内在规律性。此类算法在时间和资源充足的条件下容易被破解。本文提出的算法对用户输入的密钥有最短长度限制,同时对原始密钥进行置换后才作为加密密钥使用。为进一步增强加密强度,在加密过程中引入8位白化密钥,使加密后的数据更难以破解。此外,现有的一些程序在实现上存在漏洞,例如有的程序加密完成后,直接通过系统调用将原始文件删除,而通过常用的数据恢复软件很容易将已删除的文件还原出来,进而得到原始文件数据。本文提出的程序在加密完成后,通过随机填充的方式将原文件彻底覆盖后再进行删除,从而保证了数据安全性。
C语言是广泛应用的一种编程语言,它具有使用灵活方便、目标程序效率高、可移植性好等优点,适合于编写系统软件[6]。本算法通过C语言实现,在Windows平台下编译通过并成功运行。
1 算法设计
本程序主要分为3大模块:预处理模块、加解密模块与后处理模块。
预处理模块主要进行加密前的准备工作,其主要流程为:①读取用户输入的需要加密的文件名,检查是否正确,如不正确给出错误提示;②建立临时文件以备加解密模块使用,如创建失败,则给出错误提示并终止程序;③读取用户输入的密码,检查长度是否符合要求,如不符合则提示重新输入。
加解密模块是程序的核心模块,其主要流程为:①对用户输入的密码(也即密钥)按一定规则进行置换,目的是打乱用户输入密码中各字符之间的规律性,使密钥更加随机;②设置白化密钥,长度为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].
[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.
推荐阅读:网络隐私权的立法保护现状及完善措施
在如今的网络新时代,人们信息在快速流动,从而也出现了隐私空间被侵犯的情况,为此,怎样防止网络隐私权被侵犯的问题逐渐被重视。本文从当前出现的隐私被侵犯的问题展开研究,结合我国现行立法的规定和其他关于隐私权的立法,为隐私权的保护提供相关建议。