一种文件加解密方法

文档序号:6432140阅读:134来源:国知局
专利名称:一种文件加解密方法
技术领域
本发明涉及一种通用的文件加密和解密方法,特别适合应用于移动终端。
背景技术
目前移动终端的信息安全问题越来越得到重视,而文件加密是一种保证信息安全的有效途径。传统的加密算法一般都比较复杂,且在移动终端上的运算速度较慢。同时,目前大多数移动终端的操作系统,没有提供基于文件的安全访问机制,无法保证文件在传输、 被访问(尤其是某些恶意的应用程序)时的安全性。

发明内容
本发明需要解决的技术问题是,如何提供一种文件加解密方法,能在移动终端上的快速执行且相对安全。本发明第一个技术问题这样解决,构造一种文件加密方法,包括以下步骤 若文件大小高于门限,将文件整体分割成一个以上分段,并保存分段信息;
用随机算法确定每一分段中待加密数据的开始和结束位置,并保存加密位置信息; 根据密码生成一个加密密钥,然后用它对待加密数据进行加密,等长替换原待加密数据后得到一个加密后的数据部分;
将密码、分段位置信息、加密位置信息、加密数据头识别标记、和加密数据头长度封装成加密数据头;
将加密数据头放在所述加密后的数据部分前面,合并生成加密后的文件。按照本发明提供的文件加密方法,还包括若文件大小低于门限,将文件的数据部分分割成一分段。按照本发明提供的文件加密方法,所述分割是等分分割,所述分段信息是分段总数。按照本发明提供的文件加密方法,所述加密长度是固定长度,所述加密位置信息是每一分段中待加密数据的开始位置。按照本发明提供的文件加密方法,还包括判断待加密文件的数据头是否是有效的加密数据头(至少包含加密数据头识别标记),是直接退出加密过程,否则进行加密。按照本发明提供的文件加密方法,包括以下步骤
判断待加密文件的数据头是否是有效的加密数据头,是跳过下面所有步骤直接结束, 否则进入下面步骤;
若文件大小高于门限,将文件的数据部分等分割成一个以上分段,并保存分段数; 用随机算法确定每一分段中待加密数据的开始位置,并保存各分段加密开始位置信
息;
根据密码生成一个加密密钥,然后用它按固定长度从各分段加密开始位置向后选取固定长度数据进行加密,但如果从分段加密开始位置到该分段结束不足固定长度时则选取分段加密开始位置到该分段结束的数据进行加密,替换各自对应的原待加密数据后得到一个加密后的数据部分;
将密码、分段总数、分段加密开始位置信息、加密数据头识别标记、加密数据头长度封装成加密数据头;
将加密数据头放在所述加密后的数据部分前面,合并生成加密后的文件。本发明另一个技术问题这样解决,构造一种文件解密方法,包括以下步骤 读取加密文件、分离还原加密数据头中的密码、分段位置信息、加密位置信息;
根据分段位置信息和加密位置信息获取加密文件中各段加密数据的开始和结束位
置;
根据密码生成一个加密密钥,然后用它对加密数据进行解密,等长替换原加密数据后得到一个解密后的数据部分;
根据所述解密后的数据部分直接生成解密文件。按照本发明提供的文件解密方法,包括分离加密数据头中的分段总数,再根据等分分割算法计算个分段开始和结束位置。按照本发明提供的文件解密方法,包括分离加密数据头中的各分段加密开始位置,再根据加密开始位置到各自分段结束的长度大于固定长度以固定长度作为加密结束位置,否则以对应分段结束作为加密结束位置。按照本发明提供的文件解密方法,包括如果带解密文件的数据头包含有效的加密数据头则进入解密过程,否则直接退出解密过程。本发明提供的文件加解密方法,还可以根据用户需求对下列方法或数据结构进行调整,让用户在平衡算法安全性和速度等因素时有更多的选择空间,较现有技术具有以下优势
1.文件分段方法;
2.文件加密位置选取算法;
3.文件加密算法,独特的伪随机数产生算法;4.独特的加密文件头的数据结构。


下面结合附图和具体实施例进一步对本发明进行详细说明。图1是本发明加密文件的流程示意图; 图2是本发明解密文件的流程示意图3是图2中判断是否已加密子流程示意图。
具体实施例方式首先,说明本发明基础
(-)整个算法的设计根据文件的大小,将文件分割为若干段,然后从分割的若干段中选取若干数量的信息进行加密操作,并保存需要的相关信息到一个自己设计的数据结构; 这种方式简单高效,具有很好的安全性,非常适合要求高效的系统、设备,使得用户体验更佳;
5㈡加密算法的设计首先是利用自己设计的伪随机数生成算法,生成一个用于辅助生成密钥的伪随机数组,然后再利用自己设计的算法将辅助数组和用户密码生成一个不重复的伪随机序列,之后就是将生成的密钥与信息的内容进行加密操作。第二,下面分三大部分对本发明具体实施例的实现进行详细说明 第一部分加密
㈠加密的流程和主要操作
加密的流程,具体如附图1所示,涉及的操作主要包括
101)读取待加密文件的开头部分,看是否包含一个有效的加密数据头。如果包含,则说明这个文件已经被加密了,不能再进行加密操作了(具体识别方法请参看第三部分);
102)根据待解密文件的大小将其分割成不同段数,并保存分段位置信息;
103)用随机算法确定每一段中要加密的数据的开始和结束位置。保存为加密位置信
息;
104)根据密码生成一个加密密钥,然后用它对要加密的数据进行加密,这里采用的是等长的加密方法,加密长度默认为0.2A ,如果从加密开始位置到本段结束的长度不足 0.2Mb,则有多长就加密多长,得到一个加密后的中间文件;
105)将密码、加密位置信息、加密数据头识别信息(头部0x00000000 ;尾部 QxFFFFFFFF )、加密数据头长度等封装成一个特定数据结构的数据包一一加密数据头;
106)将加密数据头放在加密后的中间文件前面,组合成加密后的文件。㈡分段方法
分段直接采用等分分段的方式,假定文件大小力工根据所属的范围不同,分割的段数也可能不同,则分段如下
①if^ 1Mb------ 加密文件所有信息(1段)
②Uib<X<=1 OMb ------ 文件分割为5段
由于是等分分段,因此每段文件大小 XjN (取整),考虑到余数,最后一段一般要稍微大些、等于余数和Z/i (取整)的和。注I为文件大小,F为文件分割的段数。㈢加密位置的选取
利用系统的随机数发生器,以当前系统时间作为种子,输出为每个文件分割的
总段数)个/foai类型的伪随机数,保存到数组中。随机数的取值范围为(^到丨,表示加
密开始位置在该段信息中的百分比位置,根据该段大小,计算出加密信息的开始位置。这里采用的是等长的加密方法,加密长度默认为0.2描,如果从加密开始位置到本段结束的长度不足0.2M ,整段信息不足CI.2MJ的则加密整段。注(即第一段)开始加密的位置始终为文件的第一字节,即文件的开始位
置,因为大多数格式的文件的文件头信息表都存放在文件的开始位置,破坏了该文件头信息表也就意味着破坏了文件的整体结构信息,使该文件无法被解析。
㈣加密算法
加密算法主要思路
加密算法主要包括密钥扩展、子密钥初始化、子密钥伪随机化和生成密文四个步骤 ①密钥扩展
读取密码对应的数据,按照先后顺序,将每3个字节分为一组,不足字节的用0补充; 然后将每组数据(3字节,;4位)按顺序平均分为4段,每段位,然后再在这位的头部加一位1,尾部加一位1,这样就将3字节扩展为了 4字节;最后,将扩展后的密钥存放到一个数组J^s^w^^j,其中w为扩展后的密钥长度。②初始化算法
主要用来生成一个数组对,该数组中的元素将直接用来将明文数据转换为密文数
据。为了确保加密同一个文件的不同段数对应的内容都不同。这里使用了一种伪随机算法,其原理如下
设D为素数,-是两个素数(只0之积,j从2到F-1之间取值{2,3,-,^-1}。 如果下面的条件成互
({£) χ — 1) χ (ρ — 1))) 二 1 S与(P-1)χ(Q-1)的最大公约数为1
那么按照公式C = (AdVoN)计算出的(的取值范围也在2到之间
Ce{2s3,.^V-l},并且不同的2对应不同的Ci ,即实现了一个从j到C的一一映射关系。下面是该论题的数学论证
①条件随机地选择两个素数P和?;n = pxq ;1); 随机地选取一个正整数0 , Ια < φ)且“#( )) = 1 ;且;
②结论若σ=取值范围Ce{2丄..,《-1} M--M = C4Vm , Jf 亦取 Me {0,1,2,3,--, -1};并且σ 与 Jf——对应
证明
首先证明M = CiVoM ,已知C = Μ£ %
即 M = Cd = (Mef = MerjoAn
因为I=^x办/。办),这说明+ l,其中t为某整数。所以, Msxd = Mity4ismVm 。因此要证明MexdoAn = M ,只需证明
M(^ln>i)ym = M。在I = (Mj)的情况下,根据数论(欧拉定理),由模运算性质,可得,
= Μ ------------------等式结论成立
在1本(Μ,Κ)的情况下,分两种情况 第一种情况i € {1,2,3... -1} 因为《 = ,且P和€为素数, Me{1,2,3..., -1} ,Rl^(Mlfi)。这说明J/必含P或€之一为其因子,而且不能同时包含两者,否则将有JWr, 与ie {1,2,3...3-1}矛盾。不妨设Ai = β X 。又因g为素数,且Jf不包含g ,故有I = (Afj), 于是有,M^Voq = 1 ,欧拉定理。 进一步有,!^办-作沧巧一 =1
因力 w 是素数,所以=
所以有
MtxmoAq = 1
于是,Ifis^w χ分+1 ,其中 为某整数。两边同乘 ,
=bxqxM + M
因为Jf = axp ,故
Mtx^1 = bxqxax ρ + M = axbxn + Ai
取模"得,
M胁loAm = M ------------------等式结论成立
第二种情况M 5 O , 1 # (M, ) 当Ji = O时,直接验证。接着证明:C与Ai——对应
因为Jf是取模所得值,故范围在-1};所以C与I是一一对应的,若C与ikf不——对应,假设对应Jfl、M2两个整数值,且不妨设 0<Μ <Μ2 <η ,
MCdVm^Ml ’ CiVm ^ Μ2 ; 由模运算性质,得
MWon = Μ2,Ifij 匕知 O £ Ail < M2 <η ,得知假设不成立,故C与M 一一对应; 假设若]f对应Cl , C2 ,同理可证结论成立。由此可知命题成立。生成数组对…的具体伪代码描述如下其中用于辅助打乱对《],使密码
参与到加密过程;对《1的生成过程并没有使用上面的伪随机算法,使用该算法生成的数组
是,它用于存储生成的伪随机数,辅助生成伪随机密钥,在后面的伪随机子密码生成过程中将会用到它。其中D= 5,况=259,5 =43,尸=7,β = 37, = 256,具体语句段如下 For i 一 0 1 …n-1 ; A 一 2
//初始化s [η]和tmp [η],生成伪随机数random [η] S[i] — i
tmp[i] 一 password[i%m] random[i] 一 pow (A, D) % N %n A++
If i == 0 continue For r 一 0..· n-1 ; j 一 0 If random [r] != 258 randomFinal[j++] = random[r] - 2; "利用tmp [η]打乱S [η] For i 一 0." n-1; j 一 0
j 一 (j+s[i] + tmp[i]) % η
swap(s[i], s[j]) //交换 s[i]和 s[j]的值
以上过程让j从2 IiJ 258之间取值,生成一个257个元素的数组 (取值也
在2到258之间),而我们需要的伪随机数组长度为256,因此需要剔除取值为258的元素, 同时将剩余元素的值都减去2,这样就得到一个长度为256,元素取值范围为0到255之间
的数组randomFinal [ ]。③伪随机子密码生成及加密算法其中待加密的数据明文为byte[] SrcData,加密后的数据密文为同样大小的byte[] DestData0以下是具体语句段
i — 0 j — 0
1while condition //condition 为文件未结束
2If 0 == (i % 2)
3i -(i + 1)% η; //当i为偶数时
4else
5i — randomFinal [i] % η // 当 i 为奇数时
6j — (j + s[i]) % η
7swap (s[i], s[j])Il生成对应的子密钥 8 sub_key — s[(s[i] + s[j])%n]
DestData — SrcData 十 sub_key // 异或操作力口密
注意这个过程不是直接使用中的元素,而是使用②中最后生成的对《]数组作为
一个输入,另一个输入是文件中源源不断的数据,因为如果直接使用对数组,就会公用
一个相同的密钥加密,为了保证使用伪随机且不重复的密钥,所以都临时生成sub_key (算法中1-8行即生成sub_key的算法),每生成一位sub_key就对一个byte的待加密数据进行加密操作。㈤生成加密文件
新建一个临时文件,然后将封装好的加密数据头存入文件开始位置,紧接着开始填充密文数据,填充完数据后,删除原有文件,重命名临时文件为原有文件名。第二部分解密 ㈠解密的流程和主要操作
解密的流程如附图2所示,涉及的主要操作包括
201)读取待解密文件的开头部分,看是否包含一个有效的加密数据头。如果未包含,则说明这个文件没有被加密,无需进行解密操作。否则解析待解密文件的加密数据头,分离出其中的密码、加密位置、加密数据头长度等信息;
202)根据密码生成一个解密密钥,该密钥与加密密钥完全一样,生成方式也完全相
同;
203)去掉待解密文件的加密数据头,并根据加密位置信息和解密密钥对文件中的密文进行解密运算,最后生成被解密的文件。㈡解密算法
由于最终的加密操作是异或操作,故解密过程也需要加密过程使用的密钥。即加密和解密生成最终密钥的过程相同,区别在于加密最后是对明文和密钥进行异或操作,而解密是对密文和密钥进行异或的逆操作。第三部分加密数据头的数据结构和识别方法
加密数据头是一个自定义的结构体数据结构,这个数据结构保存了用户解密时所需要的信息,可以检测文件是否加密了,校验用户解密时输入的密码是否正等,同时还提供了解密时需要用到的信息,具体信息如下表所示
权利要求
1.一种文件加密方法,其特征在于,包括以下步骤若文件大小高于门限,将文件整体分割成一个以上分段,并保存分段信息; 用随机算法确定每一分段中待加密数据的开始和结束位置,并保存加密位置信息; 根据密码生成一个加密密钥,然后用它对待加密数据进行加密,等长替换原待加密数据后得到一个加密后的数据部分;将密码、分段信息、每段的加密位置信息、加密数据头识别标记、和加密数据头长度封装成加密数据头;将加密数据头放在所述加密后的数据部分前面,合并生成加密后的文件。
2.根据权利要求1所述加密方法,其特征在于,还包括若文件大小低于门限,将文件的数据部分分割成一分段。
3.根据权利要求1所述加密方法,其特征在于,所述分割是等分分割,所述分段信息是分段总数。
4.根据权利要求1所述加密方法,其特征在于,所述加密长度是固定长度,所述加密位置信息是每一分段中待加密数据的开始位置。
5.根据权利要求1所述加密方法,其特征在于,还包括判断待加密文件的数据头是否是有效的加密数据头,是直接退出加密过程,否则进行加密。
6.根据权利要求1所述加密方法,其特征在于,包括以下步骤判断待加密文件的数据头是否是有效的加密数据头,是跳过下面所有步骤直接结束, 否则进入下面步骤;若文件大小高于门限,将文件整体等分割成一个以上分段,并保存分段总数; 用随机算法确定每一分段中待加密数据的开始位置,并保存各分段加密开始位置信息;根据密码生成一个加密密钥,然后用它按固定长度从各分段加密开始位置向后选取固定长度数据进行加密,但从分段加密开始位置到该分段结束不足固定长度时则选取从分段加密开始位置到该分段结束的数据进行加密,替换各自对应的原待加密数据后得到一个加密后的数据部分;将密码、分段总数、各分段加密开始位置信息、加密数据头识别标记、加密数据头长度封装成加密数据头;将加密数据头放在所述加密后的数据部分前面,合并生成加密后的文件。
7.一种文件解密方法,其特征在于,包括以下步骤读取加密文件、分离还原加密数据头中的密码、分段总数、加密位置信息; 根据分段位置信息和加密位置信息获取加密文件中各段加密数据的开始和结束位置;根据密码生成一个加密密钥,然后用它对加密数据进行解密,等长替换原加密数据后得到一个解密后的数据部分;根据所述解密后的数据部分直接生成解密文件。
8.根据权利要求7所述解密方法,其特征在于,包括分离加密数据头中的分段数,再根据等分分割算法计算个分段开始和结束位置。
9.根据权利要求7所述解密方法,其特征在于,包括分离加密数据头中的各分段加密开始位置,再根据加密开始位置到各自分段结束的长度大于固定长度以固定长度作为加密结束位置,否则以对应分段结束作为加密结束位置。
10.根据权利要求7所述解密方法,其特征在于,包括根据待解密文件的数据头包括加密数据头识别标记选择进行解密,否则直接退出解密过程。
全文摘要
本发明涉及一种文件加解密方法,其中加密方法包括将文件整体分割成一个以上分段,并保存分段信息;用随机算法确定每一分段中待加密数据的开始和结束位置,并保存加密位置信息;根据密码生成一个加密密钥,然后用它对待加密数据进行加密,等长替换原待加密数据后得到一个加密后的数据部分;将密码、分段总数、每段的加密位置信息、加密数据头识别标记、和加密数据头长度封装成加密数据头;将加密数据头放在所述加密后的数据部分前面,合并生成加密后的文件。解密方法是加密方法的逆过程。这种文件加解密方法,能在移动终端上快速执行且相对安全。
文档编号G06F21/24GK102402670SQ201110255729
公开日2012年4月4日 申请日期2011年9月1日 优先权日2011年8月3日
发明者曾元清 申请人:广东欧珀移动通信有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1