基于混沌的通用电子档案加解密方法
技术领域
本发明属于电子加解密技术领域,特别涉及一种基于混沌的通用电子档案加解密方法。
背景技术
近年来,保护数据不被泄漏成为人们关注的热点问题。入侵者可以通过直接盗取物理存储设备和网络攻击的手段来窃取数据;而且,由于文件共享等需求,数据会被多人进行访问,这也大大增加了数据泄漏的可能性。在计算机中,文件是数据的一种组织形式,所以对文件进行加密已经成为一种公认的比较成功的保护数据的方法。事实上,现今已经有了一些比较成熟的加密算法,如DES、AES、RSA等,并且有一些工具是基于这些加密算法产生的,用户可以通过这些工具实现加密和解密。但是,由于这些工具操作麻烦、没有和整个系统紧密地结合起来,而且随着这些加密算法被不断的研究,已经有越来越多的人注意到这些工具很容易受到攻击。因此,对于新的加密文件算法的研究成为了一种必然的趋势。
混沌理论作为近年来的研究热点,其在加解密领域里的应用也已经成为了前沿课题。而logistic映射作为经典的混沌映射,蕴含了现代混沌理论的基本思想,包括倍周期到混沌、分岔图等非线性理论的基本框架和模式。本发明正是基于logistic理论而编写的。
现有的文件夹加解密方法可分为两类:基于Windows操作系统本身进行加解密和基于文件夹加解密软件进行加解密。前者在加解密的时候有诸多不便,如只可以加解密NTFS分区卷上的文件和文件夹,对FAT分区卷上的文件和文件夹无效;无法加密标记为“系统”属性的文件,并且位于系统根目录结构中的文件也无法被加解密等等。后者大多是将文件夹隐藏,或者将该文件夹转化为其他的文件格式,而且其中的文件不能够被加解密,一旦通过某种方式获得文件夹中的文件,对文件夹的加解密也就失去了意义。
发明内容
针对现有技术存在的不足,本发明提供了一种基于混沌的通用电子档案加解密方法。
该方法包括文件的加密过程与解密过程和文件夹的加密过程与解密过程;
其中文件的加密过程,按如下步骤进行:
步骤1、浏览磁盘文件;
步骤2、选择待加密的文件,获得路径Path1,Path1是待加密的文件路径;
步骤3、输入密码,定义字符指针P获得用户输入的密码的内容;
步骤4、定义一个整型变量L1用以记录密码的长度;
步骤5、将整型变量L1的值赋给一个新的整型变量Y;
步骤6、定义循环语句,循环执行次数为L1,循环执行过程按如下步骤进行:
步骤1)、在满足公式(1)的条件下,利用已定义的初始值获得当次迭代后小数点的4、5、6位组成一个整数N;
Xn+1=μXn(1-Xn) μ∈(0,4],X∈(0,1) (1)
上式为一维Logistic混沌映射公式,其中μ被称为Logistic参数,Xn被称为第一维伪随机数,n被称为伪随机数的个数。运用以上的迭代公式,从理论上来说只需要通过初始值的简单变化,就可以产生取值非常丰富的、差别很大的、很难推测的伪随机数序列。因此我们只需要简单选定初值μ和X0,然后通过不断的迭代运算,就可以产生一个很好的伪随机数序列。其中μ是一个介于(0,4]的数,X0是一个介于(0,1)的数。根据分析,发现μ取值在4附近的时候,伪随机数序列的取值区间范围较大,这个取值范围比较适合用来产生伪随机数序列。
步骤2)、执行公式M=N%256,得到一个小于256的整数M;
步骤3)、在满足公式(2)的条件下,利用已定义的初始值获得当次迭代后小数点的4、5、6位组成两个整数X和X′;
上式为二维Logistic混沌映射公式。式中,Xn被称为第一维伪随机数,Yn被称为第二维伪随机数,二维Logistic映射的混沌条件如下表所示
表1-1 二维Logistic映射的混沌条件
γ |
λ1 |
λ2 |
γ∈[0.4,0.57] |
λ1=0.6 |
λ2=0.4 |
γ∈[0.3,0.54] |
λ1=0.7 |
λ2=0.3 |
γ∈[0.2,0.45] |
λ1=0.8 |
λ2=0.2 |
γ=0.1 |
λ1∈[0.65,0.9] |
λ2∈[0.65,0.9] |
二维Logistic映射的动力学行为是由动力学方程中的控制参数λ1、λ2、γ、μ来控制的,初始点(X0,Y0)=(0.1,0.11),γ=0.1时,在参数λ1=λ2=0.89时,Windows操作系统出现混沌现象。
步骤4)、分别执行公式Z=X%256和Z′=X′%256,得到两个小于256的整数Z和Z′;
步骤5)、密码的每个字节按序与M,Z,Z′进行异或运算,得到密钥K1;
步骤6)、Y按序与M,Z,Z′进行加法运算,得到新的值Y′;
步骤7)、Y′与K1进行异或运算,得到最终的密钥K2;
步骤7、打开所选文件,获得文件的字节数L2,L2即为文件的长度;
步骤8、定义一个字符数组D,数组大小为L2;
步骤9、从文件头部开始,将文件的内容读取到数组D中;
步骤10、定义循环语句,循环执行次数为L2,循环执行过程如下:
数组D中的每个字符按序与K2分别进行异或运算,加法运算,与L2进行异或运算,与(K2%L2)进行异或运算,再与K2进行减法运算,得到数组D中的新的每个字符;
步骤11、从文件头部开始,将数组D中的内容写回到所选文件中;
步骤12、删除数组D;
步骤13、定义字符数组C,C的内容是写定的字符串;
步骤14、定义循环语句,循环执行次数为L3,L3为C的大小,循环执行内容如下:使C的每个字符与K2进行异或运算,得到新的单个字符,直至循环结束;
步骤15、找到所选文件的尾部,将C的内容写在这里,作为密码验证信息;
步骤16、关闭所选文件,完成加密。
其中文件的解密过程,按如下步骤进行:
步骤1、浏览磁盘文件;
步骤2、选择待解密的文件,获得路径Path1′,Path1′是待解密的文件路径;
步骤3、输入密码,定义字符指针P获得用户输入的密码的内容;
步骤4、定义一个整型变量L1用以记录密码的长度;
步骤5、将整型变量L1的值赋给一个新的整型变量Y;
步骤6、定义循环语句,循环执行次数为L1,循环执行过程按如下步骤进行:
步骤1)、在满足公式(1)的条件下,利用已定义的初始值获得当次迭代后小数点的4、5、6位组成一个整数N;
Xn+1=μXn(1-Xn)μ∈(0,4],X∈(0,1) (1)
上式为一维Logistic混沌映射公式,其中μ被称为Logistic参数,Xn被称为伪随机数,n被称为伪随机数的个数。运用以上的迭代公式,从理论上来说只需要通过初始值的简单变化,就可以产生取值非常丰富的、差别很大的、很难推测的伪随机数序列。因此我们只需要简单选定初值μ和X0,然后通过不断的迭代运算,就可以产生一个很好的伪随机数序列。其中μ是一个介于(0,4]的数,X0是一个介于(0,1)的数。根据分析,发现μ取值在4附近的时候,伪随机数序列的取值区间范围较大,这个取值范围比较适合用来产生伪随机数序列。
步骤2)、执行式子M=N%256,得到一个小于256的整数M;
步骤3)、在满足公式(2)的条件下,利用已定义的初始值获得当次迭代后小数点的4、5、6位组成两个整数X和X′;
上式为二维Logistic混沌映射公式。二维Logistic映射的混沌条件如下表所示
表1-2 二维Logistic映射的混沌条件
γ |
λ1 |
λ2 |
γ∈[0.4,0.57] |
λ1=0.6 |
λ2=0.4 |
γ∈[0.3,0.54] |
λ1=0.7 |
λ2=0.3 |
γ∈[0.2,0.45] |
λ1=0.8 |
λ2=0.2 |
γ=0.1 |
λ1∈[0.65,0.9] |
λ2∈[0.65,0.9] |
二维Logistic映射的动力学行为是由动力学方程中的控制参数λ1、λ2、γ、μ来控制的,初始点(X0,Y0)=(0.1,0.11),γ=0.1时,在参数λ1=λ2=0.89时,Windows操作系统出现混沌现象。
步骤4)、分别执行式子Z=X%256和Z′=X′%256,得到两个小于256的整数Z和Z′;
步骤5)、密码的每个字节按序与M,Z,Z′进行异或运算,得到密钥K1′;
步骤6)、Y按序与M,Z,Z′进行加法运算,得到新的值Y′;
步骤7)、Y′与K1′进行异或运算,得到最终的密钥K2′;
步骤7、打开所选文件,找到文件的末尾,获取文件末尾的后L3个字符,将其读入新定义的字符数组C′中;
步骤8、定义循环语句,循环执行次数为L3,循环执行内容如下:使C′的每个字符与K2′进行异或运算,得到新的单个字符,直至循环结束;
步骤9、比较C′的每个字符与C的每个字符,验证是否每个字符都相等,如果相等,执行步骤10,否则显示“解密失败”;
步骤10、打开所选文件,获得文件的字节数L2′,L2′即为文件的长度;
步骤11、定义一个字符数组D′,数组大小为L2′;
步骤12、从文件头部开始,将文件的内容读取到数组D′中;
步骤13、定义循环语句,循环执行次数为(L2′-L3),循环执行内容如下:数组D′中的前(L2′-L3)个字符分别按序与K2′进行加法运算,与(L2′-L3)进行异或运算,与(K2′%(L2′-L3))进行异或运算,与K2′进行减法运算,异或运算,得到数组D′中的新的每个字符;
步骤14、从文件头部开始,将数组D′中的内容写回到所选文件中;
步骤15、设置文件长度为(L2′-L3)。
步骤16、关闭所选文件,完成解密。
其中文件夹的加密过程,按如下步骤进行:
步骤1、浏览磁盘文件夹;
步骤2、选择待加密的文件夹,获得路径Pa1,Pa1是待加密的文件夹路径;
步骤3、输入密码,定义字符指针P获得用户输入的密码的内容;
步骤4、对文件夹进行遍历操作。在Pa1后面添加“\\”和*.*,以获得对所有文件进行选定操作的权利;此时如果遇到了子文件夹,先过滤Windows操作系统在文件夹下自带的“.”和“..”文件夹,而后递归遍历该文件夹下的子文件夹,以获得对子文件夹下的所有文件的选定操作权利;
步骤5、对文件夹下的所有文件包括子文件夹下的所有文件逐个执行“文件加密过程”的步骤4-16,实现对所有文件的加密处理;
步骤6在待加密的文件夹名称的后面加上一个后缀,令其成为Windows操作系统文件格式,完成对文件夹的加密操作。
其中文件夹的解密过程,按如下步骤进行:
步骤1、浏览磁盘文件夹;
步骤2、选择待解密的文件夹,获得路径Pa1′,Pa1′是待加密的文件夹路径;
步骤3、输入密码,定义字符指针P获得用户输入的密码的内容;
步骤4、过滤待解密文件夹的后缀,使其由Windows操作系统文件格式恢复为普通文件夹格式;
步骤5、对文件夹进行遍历操作。在Pa1′后面添加“\\”和*.*,以获得对所有文件进行选定操作的权利;此时如果遇到了子文件夹,先过滤Windows操作系统在文件夹下自带的“.”和“..”文件夹,而后递归遍历该文件夹下的子文件夹,以获得对子文件夹下的所有文件的选定操作权利;
步骤6、对文件夹下的所有文件(包括子文件夹下的所有文件)逐个执行“文件解密过程”的步骤4-16,实现对所有文件的解密处理。
本发明的优点:该方法将目标文件夹加密为Windows操作系统文件,利用混沌理论将文件夹下的文件逐个进行加密,实现了双重加密机制。而解密时利用密钥验证机制,逐步对文件和文件夹进行解密,实现了在安全性方面的双重保障,并且Windows操作系统在时间复杂度方面也有不错的表现。
附图说明
图1为本发明文件加密过程流程图;
图2为本发明文件解密过程流程图;
图3为本发明文件夹加密过程流程图;
图4为本发明文件夹解密过程流程图。
具体实施方式
本发明结合具体实施例和说明书附图加以详细说明。
开发环境硬件配置
版本:V7.99.10.1221
Windows操作系统:Microsoft Windows XP Professional(SP3)
CPU:英特尔Pentium Dual-Core E5200 @ 2.50GHz
内存:4GB(三星DDR2667MHz)
硬盘:500GB(剩余403.03GB)
该方法包括文件的加密过程与解密过程和文件夹的加密过程与解密过程;
其中文件的加密过程,按如下步骤进行:如图1所示,
步骤1、浏览磁盘文件;
步骤2、选择待加密的文件,获得路径Path1,Path1是待加密的文件路径;
步骤3、输入密码,定义字符指针P获得用户输入的密码的内容;
步骤4、定义一个整型变量L1用以记录密码的长度;
步骤5、将整型变量L1的值赋给一个新的整型变量Y;
步骤6、定义循环语句,循环执行次数为L1,循环执行过程按如下步骤进行:
步骤1)、在满足公式(1)的条件下,利用已定义的初始值获得当次迭代后小数点的4、5、6位组成一个整数N;
Xn+1=μXn(1-Xn)μ∈(0,4],X∈(0,1) (1)
上式为一维Logistic混沌映射公式,其中μ被称为Logistic参数,Xn被称为伪随机数,n被称为伪随机数的个数。运用以上的迭代公式,从理论上来说只需要通过初始值的简单变化,就可以产生取值非常丰富的、差别很大的、很难推测的伪随机数序列。因此我们只需要简单选定初值μ和X0,然后通过不断的迭代运算,就可以产生一个很好的伪随机数序列。其中μ是一个介于(0,4]的数,X0是一个介于(0,1)的数。根据分析,发现μ取值在4附近的时候,伪随机数序列的取值区间范围较大,这个取值范围比较适合用来产生伪随机数序列。本实施例定义μ=3.9,X0=0.01。
步骤2)、执行公式M=N%256,得到一个小于256的整数M;
步骤3)、在满足公式(2)的条件下,利用已定义的初始值获得当次迭代后小数点的4、5、6位组成两个整数X和X′;
上式为二维Logistic混沌映射公式。二维Logistic映射的混沌条件如下表所示
表1-1 二维Logistic映射的混沌条件
γ |
λ1 |
λ2 |
γ∈[0.4,0.57] |
λ1=0.6 |
λ2=0.4 |
γ∈[0.3,0.54] |
λ1=0.7 |
λ2=0.3 |
γ∈[0.2,0.45] |
λ1=0.8 |
λ2=0.2 |
γ=0.1 |
λ1∈[0.65,0.9] |
λ2∈[0.65,0.9] |
二维Logistic映射的动力学行为是由动力学方程中的控制参数λ1、λ2、γ、μ来控制的,通常取μ=4。初始点(X0,Y0)=(0.1,0.11),γ=0.1时,在参数λ1=λ2=0.89时,Windows操作系统出现混沌现象。本实施例定义μ=4,(X0,Y0)=(0.1,0.11)γ=0.1,λ1=λ2=0.89。
步骤4)、分别执行公式Z=X%256和Z′=X′%256,得到两个小于256的整数Z和Z′;
步骤5)、密码的每个字节按序与M,Z,Z′进行异或运算,得到密钥K1;
步骤6)、Y按序与M,Z,Z′进行加法运算,得到新的值Y′;
步骤7)、Y′与K1进行异或运算,得到最终的密钥K2;
步骤7、打开所选文件,获得文件的字节数L2,L2即为文件的长度;
步骤8、定义一个字符数组D,数组大小为L2;
步骤9、从文件头部开始,将文件的内容读取到数组D中;
步骤10、定义循环语句,循环执行次数为L2,循环执行过程如下:
数组D中的每个字符按序与K2分别进行异或运算,加法运算,与L2进行异或运算,与(K2%L2)进行异或运算,再与K2进行减法运算,得到数组D中的新的每个字符;
步骤11、从文件头部开始,将数组D中的内容写回到所选文件中;
步骤12、删除数组D;
步骤13、定义字符数组C,C的内容是写定的字符串;
步骤14、定义循环语句,循环执行次数为L3,L3为C的大小,循环执行内容如下:使C的每个字符与K2进行异或运算,得到新的单个字符,直至循环结束;
步骤15、找到所选文件的尾部,将C的内容写在这里,作为密码验证信息;
步骤16、关闭所选文件,完成加密。
文件的加密结果如下表所示:
加密前 |
加密后 |
好好学习,天天向上! |
傷>螓酚ǔH责」晖衰絇PP_D3 |
其中文件的解密过程,按如下步骤进行:如图2所示,
步骤1、浏览磁盘文件;
步骤2、选择待解密的文件,获得路径Path1′,Path1′是待解密的文件路径;
步骤3、输入密码,定义字符指针P获得用户输入的密码的内容;
步骤4、定义一个整型变量L1用以记录密码的长度;
步骤5、将整型变量L1的值赋给一个新的整型变量Y;
步骤6、定义循环语句,循环执行次数为L1,循环执行过程按如下步骤进行:
步骤1)、在满足公式(1)的条件下,利用已定义的初始值获得当次迭代后小数点的4、5、6位组成一个整数N;
Xn+1=μXn(1-Xn)μ∈(0,4],X∈(0,1) (1)
上式为一维Logistic混沌映射公式,其中μ被称为Logistic参数,Xn被称为伪随机数,n被称为伪随机数的个数。运用以上的迭代公式,从理论上来说只需要通过初始值的简单变化,就可以产生取值非常丰富的、差别很大的、很难推测的伪随机数序列。因此我们只需要简单选定初值μ和X0,然后通过不断的迭代运算,就可以产生一个很好的伪随机数序列。其中μ是一个介于(0,4]的数,X0是一个介于(0,1)的数。根据分析,发现μ取值在4附近的时候,伪随机数序列的取值区间范围较大,这个取值范围比较适合用来产生伪随机数序列。本实施例定义μ=3.9,X0=0.01。
步骤2)、执行式子M=N%256,得到一个小于256的整数M;
步骤3)、在满足公式(2)的条件下,利用已定义的初始值获得当次迭代后小数点的4、5、6位组成两个整数X和X′;
上式为二维Logistic混沌映射公式。二维Logistic映射的混沌条件如下表所示
表1-2 二维Logistic映射的混沌条件
γ |
λ1 |
λ2 |
γ∈[0.4,0.57] |
λ1=0.6 |
λ2=0.4 |
γ∈[0.3,0.54] |
λ1=0.7 |
λ2=0.3 |
γ∈[0.2,0.45] |
λ1=0.8 |
λ2=0.2 |
γ=0.1 |
λ1∈[0.65,0.9] |
λ2∈[0.65,0.9] |
二维Logistic映射的动力学行为是由动力学方程中的控制参数λ1、λ2、γ、μ来控制的,通常取μ=4。初始点(X0,Y0)=(0.1,0.11),γ=0.1时,在参数λ1=λ2=0.89时,Windows操作系统出现混沌现象。本实施例定义μ=4,(X0,Y0)=(0.1,0.11)γ=0.1,λ1=λ2=0.89。
步骤4)、分别执行式子Z=X%256和Z′=X′%256,得到两个小于256的整数Z和Z′;
步骤5)、密码的每个字节按序与M,Z,Z′进行异或运算,得到密钥K1′;
步骤6)、Y按序与M,Z,Z′进行加法运算,得到新的值Y′;
步骤7)、Y′与K1′进行异或运算,得到最终的密钥K2′;
步骤7、打开所选文件,找到文件的末尾,获取文件末尾的后L3个字符,将其读入新定义的字符数组C′中;
步骤8、定义循环语句,循环执行次数为L3,循环执行内容如下:使C′的每个字符与K2′进行异或运算,得到新的单个字符,直至循环结束;
步骤9、比较C′的每个字符与C的每个字符,验证是否每个字符都相等,如果相等,执行步骤10,否则显示“解密失败”;
步骤10、打开所选文件,获得文件的字节数L2′,L2′即为文件的长度;
步骤11、定义一个字符数组D′,数组大小为L2′;
步骤12、从文件头部开始,将文件的内容读取到数组D′中;
步骤13、定义循环语句,循环执行次数为(L2′-L3),循环执行内容如下:数组D′中的前(L2′-L3)个字符分别按序与K2′进行加法运算,与(L2′-L3)进行异或运算,与(K2′%(L2′-L3))进行异或运算,与K2′进行减法运算,异或运算,得到数组D′中的新的每个字符;
步骤14、从文件头部开始,将数组D′中的内容写回到所选文件中;
步骤15、设置文件长度为(L2′-L3)。
步骤16、关闭所选文件,完成解密。
文件的解密结果如下表所示:
解密前 |
解密后 |
傷>螓酚ǔH责」晖衰絇PP_D3 |
好好学习,天天向上! |
其中文件夹的加密过程,按如下步骤进行:
步骤1、浏览磁盘文件夹;
步骤2、选择待加密的文件夹,获得路径Pa1,Pa1是待加密的文件夹路径;
步骤3、输入密码,定义字符指针P获得用户输入的密码的内容;
步骤4、对文件夹进行遍历操作。在Pa1后面添加“\\”和*.*,以获得对所有文件进行选定操作的权利;此时如果遇到了子文件夹,先过滤Windows操作系统在文件夹下自带的“.”和“..”文件夹,而后递归遍历该文件夹下的子文件夹,以获得对子文件夹下的所有文件的选定操作权利;
步骤5、对文件夹下的所有文件包括子文件夹下的所有文件逐个执行“文件加密过程”的步骤4-16,实现对所有文件的加密处理;
步骤6在待加密的文件夹名称的后面加上一个后缀
——“.{E211B736-43FD-11D1-9EFB-0000F8757FCD}”,令其成为Windows操作系统文件格式,完成对文件夹的加密操作。
文件夹的加密结果如下表所示:
加密前 |
加密后 |
普通文件夹/文件内容可读 |
系统文件/文件内容不可读 |
其中文件夹的解密过程,按如下步骤进行:
步骤1、浏览磁盘文件夹;
步骤2、选择待解密的文件夹,获得路径Pa1′,Pa1′是待加密的文件夹路径;
步骤3、输入密码,定义字符指针P获得用户输入的密码的内容;
步骤4、过滤待解密文件夹的后缀——“.{E211B736-43FD-11D1-9EFB-0000F8757FCD}”,使其由Windows操作系统文件格式恢复为普通文件夹格式;
步骤5、对文件夹进行遍历操作。在Pa1′后面添加“\\”和*.*,以获得对所有文件进行选定操作的权利;此时如果遇到了子文件夹,先过滤Windows操作系统在文件夹下自带的“.”和“..”文件夹,而后递归遍历该文件夹下的子文件夹,以获得对子文件夹下的所有文件的选定操作权利;
步骤6、对文件夹下的所有文件(包括子文件夹下的所有文件)逐个执行“文件解密过程”的步骤4-16,实现对所有文件的解密处理。
文件夹的解密结果如下表所示:
解密前 |
解密后 |
系统文件/文件内容不可读 |
普通文件夹/文件内容可读 |