CN101895389B - 采用比例计算的基于组合编码的文件加密和解密的方法 - Google Patents

采用比例计算的基于组合编码的文件加密和解密的方法 Download PDF

Info

Publication number
CN101895389B
CN101895389B CN2010102285322A CN201010228532A CN101895389B CN 101895389 B CN101895389 B CN 101895389B CN 2010102285322 A CN2010102285322 A CN 2010102285322A CN 201010228532 A CN201010228532 A CN 201010228532A CN 101895389 B CN101895389 B CN 101895389B
Authority
CN
China
Prior art keywords
mrow
sequence
msub
key
grouping
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN2010102285322A
Other languages
English (en)
Other versions
CN101895389A (zh
Inventor
陆军
陈立岩
李培华
高扬
吕兴凤
王圣宏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Heilongjiang University
Original Assignee
Heilongjiang University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Heilongjiang University filed Critical Heilongjiang University
Priority to CN2010102285322A priority Critical patent/CN101895389B/zh
Publication of CN101895389A publication Critical patent/CN101895389A/zh
Application granted granted Critical
Publication of CN101895389B publication Critical patent/CN101895389B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

采用比例计算的基于组合编码的文件加密和解密的方法,属于信息安全领域,本发明为解决现有对文件加密、解密方法的保密性能差的问题。本发明文件加密的方法:根据初始密钥求解所有的密钥序列,每轮加密都先对分组序列中的数据进行全排列,形成字典空间,计算出序数,然后按规则进行拼接新序列,该轮所有组的密钥序列进行循环拼接后与新序列进行异或,奇数轮时形成的加密文件前后置换元素,经过四轮加密形成最终加密文件;解密过程是加密的逆过程,遇奇数轮先前后置换元素,然后与循环拼接的密钥序列进行异或,采用穷举方法逐个解析分组序列的元素,将解析完毕的m个分组序列及余数进行拼接,作为待解密文件,经过四轮完成解密。

Description

采用比例计算的基于组合编码的文件加密和解密的方法
技术领域
本发明涉及采用比例计算的基于组合编码的文件加密和解密的方法,属于信息安全领域。
背景技术
在信息技术飞速发展的现代社会,信息安全占有重要地位,而密码技术是信息安全的保障及核心。
密码作为保密信息手段,根据对明文处理方式不同,密码编码系统有分组密码和流密码两类,分组加密一次处理一组元素的输入,分组密码体制属于传统加密体制,目前已有大量分组密码,如DES的各种变形、IDEA算法、SAFER系列算法、RC系列算法等。
分组密码的设计准则包括安全性准则和实现性准则。安全性设计准则主要包括三方面:密码算法设计准则、密钥长度设计准则和分组长度设计准则。
(1)密码算法设计准则
现代密码体制的安全性仅依赖于密钥的保密,而不依赖于算法保密。总之,密码算法设计要遵循表1所示准则。
表1密码算法设计准则
其中,混乱和扩散是香农1945年提出的两种隐藏明文冗余度的基本技术,是加密算法设计的基石。而所谓弱密钥是指对于初始密钥k,生成的子密钥都相等,则称k是弱密钥;若有一对密钥k1,k2,使得两密钥互为加密/解密密钥,则称k1,k2是半弱密钥。
(2)密钥长度设计准则
必须保证密钥长度足够大,才能使密码算法抵抗强力攻击,密钥越长意味着安全性越高,但是加密/解密的速度也越慢。目前64位密钥长度已经不能满足安全需要,所以128/192/256位成了常用的长度。
(3)分组长度设计准则
为阻止对分组密码进行统计分析,分组长度必须足够大。分组越大意味着安全性越高,但是加密/解密的速度也越慢。目前128位的分组大小被认为是一个合理的折衷。由于目前分组密码通常是简单的代换密码,而明文又有一定的冗余度,因此理论上可以对密文进行频率统计分析。但是当分组长度足够大时,这种分析就需要大量的密文数据,从而使计算不可行。此外,由于分组密码需要迭代计算,因此安全性准则通常还包括以下几点:
(1)迭代轮数
迭代轮数应该足够多。一般来说,循环迭代轮数越多安全性越高,常用16轮循环,也有11轮、8轮或6轮的,通常是安全性与实现性的折中。
(2)迭代轮函数
迭代轮函数要足够复杂,复杂性越高,抗击密码分析的能力就越强。
(3)密钥编排算法
一般说来,推测各个子密钥和由此推出主密钥的难度越大越好。因此子密钥编排算法越复杂,密码分析就越困难。子密钥生成算法同样要满足扩散性好以及具有混乱特性。
分组密码的实现性准则主要讨论如何提高算法的执行速度。分组密码既可以用软件实现,也可以用硬件实现。硬件实现的优点是可以获得高速率,而软件实现的优点是灵活性强、代价低。
现有加密/解密技术中变换算法所涉及矩阵固定,如S-盒表、各种置换表是固定的,另外,各分组密钥通常是相同的,这些因素使得加密技术的机密性存在隐患,保密性能差。
发明内容
本发明目的是为了解决现有对文件加密、解密方法的保密性能差的问题,提供了采用比例计算的基于组合编码的文件加密和解密的方法。
本发明基于组合编码的文件加密的方法:
设定第一轮加密时,第1组分组序列的分组密钥为初始密钥K0,初始密钥K0的单位长度为k比特,每轮加密时都将待加密文件按组长度为n分成m组分组序列和一个余数,一种基于组合编码的文件加密的方法包括以下步骤:
步骤一、根据所述初始密钥K0确定第一轮加密时所有组的分组密钥Km-1
步骤二、根据分组密钥Km-1确定该组所有轮加密时的子密钥K(m-1)(w-1),w为文件加密轮数,
步骤三、初始化加密的轮数w=1,
步骤四、将待加密文件按组长度为n进行分组,
每组分组序列的元素数目为n,每个元素的单位长度为k比特,
步骤五、找到密钥序列的第一个元素在与其对应的分组序列中最后一次出现的位置,并将分组序列中该位置的元素与分组序列的最后一个元素进行置换,形成新的分组序列,对新形成的每组分组序列的数据进行全排列,形成字典空间C(m-1)(w-1),然后按如下公式求取新形成的每组分组序列在各自字典空间中的序数N(m-1)(w-1)
N ( m - 1 ) ( w - 1 ) = Σ j = 1 n Σ x = 1 i - 1 S j , x ,
其中,j表示当前被处理元素在分组序列中的位置,i表示当前被处理元素在当前组对应的密钥序列中的位置,密钥序列的前i-1个元素中每个位置为x的元素占有分组序列第j位时应有的排列组合值用Sj,x表示,N(m-1)(w-1)≥0,
步骤六、按分组序列中被置换到最后位置的元素的原始位置+分组序列含对应密钥各元素的数目+分组序列的序数的原则将当前轮各组序列进行重新拼接,结尾处加入余数长度,形成新的待加密文件,
即,新的待加密文件拼接为:
第1组分组序列中被置换到最后位置的元素的原始位置+第1组分组序列含对应密钥各元素的数目+第1组分组序列的序数N0(w-1)
+第2组分组序列中被置换到最后位置的元素的原始位置+第2组分组序列含对应密钥各元素的数目+第2组分组序列的序数N1(w-1)
+……
+第m组分组序列中被置换到最后位置的元素的原始位置+第m组分组序列含对应密钥各元素的数目+第m组分组序列的序数N(m-1)(w-1)
+余数长度,
步骤七、将该轮所有组的密钥序列进行循环拼接,使其长度与步骤六形成的新的待加密文件的长度相同,然后与步骤六形成的新的待加密文件进行异或,结果作为下一轮的待加密文件,
步骤八、判断w是否为奇数,
判断结果为是,执行步骤九,判断结果为否,执行步骤十,
步骤九、将步骤七形成的下一轮的待加密文件中所有元素的位置前后置换,作为该轮形成的加密文件,并作为下一轮待加密文件,
步骤十、判断是否满足下述条件:w≥4,
判断结果为否,令w=w+1,执行步骤四,判断结果为是,将本轮形成的加密文件作为最终结果,完成对文件的加密。
本发明基于组合编码的文件解密的方法包括以下步骤:
已知该文件在第一轮加密时,第1组分组序列的分组密钥为初始密钥K0,初始密钥K0的单位长度为k比特,已知该文件的被加密轮数为w轮,本方法的解密从第w轮开始,
一种基于组合编码的文件解密的方法包括以下步骤:
步骤1、根据所述初始密钥K0确定第一轮加密时所有组的分组密钥Km-1
步骤2、根据分组密钥Km-1确定该组所有轮加密时的子密钥K(m-1)(w-1)
步骤3、初始化被加密的轮数w=4,
步骤4、判断w是否为奇数,
判断结果为是,执行步骤5,判断结果为否,执行步骤6,
步骤5、将待解密文件的所有元素的位置前后倒置,作为本轮的待解密文件,
步骤6、将该轮所有组的密钥序列进行循环拼接,使其长度与本轮的待解密文件的长度相同,然后与本轮的待解密文件进行异或,异或结果作为该轮待解密文件,
步骤7、将该轮待解密文件根据相关标志进行分组,形成m组数据,相关标志包括分组序列中被置换到最后位置的元素的原始位置、密钥各元素数目和序数长度,
步骤8、通过步骤7每组数据中分组序列中被置换到最后位置的元素的原始位置、含对应密钥各元素的数目、分组序列的序数和余数长度信息,逐个解析步骤7获得的m组数据,
步骤9、按照当前分组序列对应的密钥序列中元素的顺序,采用穷举方法解析该组分组序列的数据,将解析完毕的m个分组序列及余数进行拼接,作为下一轮待解密文件,
步骤10、判断是否满足下述条件:w≤1,
判断结果为否,令w=w-1,执行步骤4,判断结果为是,将本轮形成的解密文件作为最终结果,完成对文件的解密。
本发明的优点:组合加密技术算法独特,不涉及固有矩阵参与运算,此外,现有加密算法分组密钥通常相同,而组合加密技术中子密钥与分组密钥都不相同,并且同初始的主密钥空间一样大,从而加大了推测各个子密钥、分组密钥和由此推出初始主密钥的难度,使得保密性更强。采用比例计算加快了加密解密的运算速度。该加密方法适合对文件进行软件加密。
附图说明
图1是本发明基于组合编码的文件加密的方法流程图,图2是本发明基于组合编码的文件解密的方法流程图,图3是密钥关系图。
具体实施方式
具体实施方式一:下面结合图1和图3说明本实施方式,本实施方式是一种基于组合编码的文件加密的方法,设定第一轮加密时,第1组分组序列的分组密钥为初始密钥K0,初始密钥K0的单位长度为k比特,每轮加密时都将待加密文件按组长度为n分成m组分组序列和一个余数,一种基于组合编码的文件加密的方法包括以下步骤:
步骤一、根据所述初始密钥K0确定第一轮加密时所有组的分组密钥Km-1
步骤二、根据分组密钥Km-1确定该组所有轮加密时的子密钥K(m-1)(w-1),w为文件加密轮数,
步骤三、初始化加密的轮数w=1,
步骤四、将待加密文件按组长度为n进行分组,
每组分组序列的元素数目为n,每个元素的单位长度为k比特,
步骤五、步骤五、找到密钥序列的第一个元素在与其对应的分组序列中最后一次出现的位置,并将分组序列中该位置的元素与分组序列的最后一个元素进行置换,形成新的分组序列,对新形成的每组分组序列的数据进行全排列,形成字典空间C(m-1)(w-1),然后按如下公式求取新形成的每组分组序列在各自字典空间中的序数N(m-1)(w-1)
N ( m - 1 ) ( w - 1 ) = Σ j = 1 n Σ x = 1 i - 1 S j , x ,
其中,j表示当前被处理元素在分组序列中的位置,i表示当前被处理元素在当前组对应的密钥序列中的位置,密钥序列的前i-1个元素中每个位置为x的元素占有分组序列第j位时应有的排列组合值用Sj,x表示,N(m-1)(w-1)≥0,
步骤六、按分组序列中被置换到最后位置的元素的原始位置+分组序列含对应密钥各元素的数目+分组序列的序数的原则将当前轮各组序列进行重新拼接,结尾处加入余数长度,形成新的待加密文件,
即,新的待加密文件拼接为:
第1组分组序列中被置换到最后位置的元素的原始位置+第1组分组序列含对应密钥各元素的数目+第1组分组序列的序数N0(w-1)
+第2组分组序列中被置换到最后位置的元素的原始位置+第2组分组序列含对应密钥各元素的数目+第2组分组序列的序数N1(w-1)
+……
+第m组分组序列中被置换到最后位置的元素的原始位置+第m组分组序列含对应密钥各元素的数目+第m组分组序列的序数N(m-1)(w-1)
+余数长度,
步骤七、将该轮所有组的密钥序列进行循环拼接,使其长度与步骤六形成的新的待加密文件的长度相同,然后与步骤六形成的新的待加密文件进行异或,结果作为下一轮的待加密文件,
步骤八、判断w是否为奇数,
判断结果为是,执行步骤九,判断结果为否,执行步骤十,
步骤九、将步骤七形成的下一轮的待加密文件中所有元素的位置前后置换,作为该轮形成的加密文件,并作为下一轮待加密文件,
步骤十、判断是否满足下述条件:w≥4,
判断结果为否,令w=w+1,执行步骤四,判断结果为是,将本轮形成的加密文件作为最终结果,完成对文件的加密。
k与n越长,保密性越好,当k>=6时,才能满足保密需要。
根据密钥单位长度k可以得到不同密钥元素数目为2k,确定双方约定的密钥顺序,密钥中含有2k个元素,且每个元素不重复,统计分组数据中各个密钥元素的数目分别为:n1,n2,......,
Figure GSB00000631724500061
步骤一中的分组密钥Km-1的获取方法为:
第一轮加密时,每组分组密钥Km-1将其前一组密钥序列的数据先循环右移或左移一位,形成待用密钥序列,然后采用数据替代法生成当前组的分组密钥Km-1
采用数据替代法生成当前组的分组密钥Km-1的过程为:找到所述待用密钥序列的第x号位置数据y,再寻找待用密钥序列第y号位置的数据z,将数据z作为当前组的分组密钥Km-1第x号位置的数据。
下面给出一个具体的实施例:
假定前一组密钥序列如表1所示:
表1
  位置   0   1   2   3 ...  11   12 ...  18   19 ...  26   27 ...
  数据   18   12   1   26 ...  3   27 ...  11   28 ...  5   19 ...
将表1中数据循环右移一位后形成待用密钥序列如表2所示:
表2
  位置  0   1   2   3 ...  11   12 ...   18   19 ...  26   27 ...
  数据  9   18   12   1 ...  15   3 ...   12   11 ...  4   5 ...
将表2中数据采用数据替代法生成当前组的分组密钥Km-1如表3所示:
表3
  位置  0   1   2   3 ...  11   12 ...  18   19 ...  26   27 ...
  数据  7   12   3   18 ...  7   1 ...  3   15 ...  6   8 ...
步骤二中的子密钥K(m-1)(w-1)的获取方法为:
第m-1组的子密钥K(m-1)(w-1)根据当前组的前一轮的分组密钥采用数据替代法生成,具体过程为:
令第m-1组的前一轮的分组密钥作为待用密钥序列,
找到所述待用密钥序列的第x号位置数据y,再寻找待用密钥序列第y号位置的数据z,将数据z作为当前第m-1组的子密钥K(m-1)(w-1)第x号位置的数据,形成新的序列,
然后将所述新的序列的数据循环右移或左移一位作为第m-1组的子密钥K(m-1)(w-1)
下面给出一个具体的实施例:
假定当前组(第m-1组)前一轮分组密钥的密钥序列(待用序列)如表4所示:
表4
  位置   0   1   2   3 ...  11   12 ...  18   19 ...  26   27 ...
  数据   18   12   1   26 ...  3   27 ...  11   28 ...  5   19 ...
找到表1所述待用密钥序列的第x号位置数据y,再寻找待用密钥序列第y号位置的数据z,将数据z作为当前第m-1组的子密钥K(m-1)(w-1)第x号位置的数据,形成新的序列,如表5所示:
表5
  位置   0   1   2   3 ...   11   12 ...   18   19 ...  26   27 ...
数据 11 27 12 5 ... 26 19 ... 3 13 ... 8 28 ...
然后将表5新的序列的数据循环右移一位作为第m-1组的子密钥K(m-1)(w-1),如表6所示:
表6
  位置  0   1   2   3 ...   11   12 ...  18   19 ...  26   27  ...
  数据  9   11   27   12 ...   7   26 ...  25   3 ...  6   8  ...
步骤五中字典空间C(m-1)(w-1)含有
Figure GSB00000631724500081
个不同的排列,n1、n2、...、
Figure GSB00000631724500082
为当前组的分组序列中含有对应的密钥序列中各密钥元素的数目,相当于当前组的分组序列中不同的元素的重复次数。
步骤五序数N(m-1)(w-1)的获取过程为:
步骤a、获取分组序列进行全排列的最大组合数Q:
Q=P+1,
其中,P为分组序列进行全排列的最大序数,并按如下公式获取:
P = C 2 k n 1 × C 2 k - n 1 n 2 × C 2 k - n 1 - n 2 n 3 × . . . . . . × C n 2 k n 2 k - 1 , P ≥ 0 ,
当前组的分组序列中含有对应的密钥序列中各密钥元素的数目分别为:n1,n2,......,
Figure GSB00000631724500084
序数N(m-1)(w-1)所占位数与当前组的分组序列的最大序数P所占位数相同,
步骤b、逐一处理分组序列中的各元素,初始化j=1,j为分组序列中的各元素的位置,
分组序列中的第一元素是密钥第一元素时,不作处理;
分组序列中的第一元素不是密钥第一元素时,假设该分组序列对应的密钥序列中第一个元素占用分组序列的第1位置时的排列组合值S1,1为:
S 1,1 = Q × w 1 n ′
其中,w1为分组序列中对应密钥序列第1个元素未被处理的数目,n′为处理第j元素时,包括j元素本身在内的所有剩余元素数目,
步骤c、j=j+1,
步骤d、判断j位置元素在该分组序列对应的密钥序列中的位置是否为第一位,
判断结果为是,该位置元素不作处理,然后返回执行步骤c,当分组序列中所有元素都判断完毕后跳出程序,判断结果为否,执行步骤e,
步骤e、判断分组序列中自第1至第j-1位置的元素是否都与密钥第一元素相同,判断结果为是,假设该分组序列对应的密钥序列中第一个元素占用分组序列的第j位置时求取其排列组合值Sj,1
S j , 1 = Q × m ! / ( m - empty - 1 ) ! n ′ ! / ( n ′ - empty - 1 ) !
其中,m表示处理第j-1-empty元素时密钥序列第一元素在分组序列中的剩余数目,empty表示分组序列中第j元素之前连续不作处理的元素个数,
判断结果为否,假设该分组序列对应的密钥序列中第一个元素占用分组序列的第j位置时求取其排列组合值Sj,1
S j , 1 = S j - 1 - empty , 1 × w i m × m ! / ( m - empty - 1 ) ! n ′ ! / ( n ′ - empty - 1 ) !
其中,wi为分组序列中第j元素前的最近的被处理元素的数目,wi在密钥序列中排在第i位,
步骤f、获取处理第j元素的总排列组合值:
Σ x = 1 i - 1 S j , x = ( S j , 1 × Σ k = 1 i - 1 w k ) / w 1 ,
wk表示分组序列中对应密钥序列前i-1个元素中各个元素的数目,
重复执行步骤c至步骤f,直至将分组序列中所有元素处理完毕,
步骤g、获取分组序列在各自字典空间中的序数N(m-1)(w-1)
N ( m - 1 ) ( w - 1 ) = Σ j = 1 n Σ x = 1 i - 1 S j , x .
步骤六中按分组序列含对应密钥各元素的数目的存储格式为:
按照密钥序列中元素大小的顺序进行存储,设定密钥序列中元素的数目为a,如果某元素数目每达到2k-1的倍数,便增加k位,存储前a-1个密钥元素的数目,最后一个元素数目由分组序列长度减去已经存储的前a-1个密钥元素数目获得。
当分组序列的长度不是组长度n的整数倍的时候,会出现余数,在形成的新序列中记录余数长度,步骤六中余数长度为:
Figure GSB00000631724500101
下面给出一个具体的加密的实施例。
假设待加密数据二进制序列为:
110001100001100001001101101101110101100001001101
设密钥单位长度k=2和组长度n=12。则密钥所涉及不同元素数目为22=4,不同元素分别为0,1,2,3。通常n为不同元素数目的整数倍。待加密序列可以分为2组:110001100001100001001101;101101110101100001001101(转换为4进制,每组为n=12个元素:3,0,1,2,0,1,2,0,1,0,3,1;2,3,1,3,1,1,2,0,1,0,3,1)。
由于初始序列长度是n的整数倍(4进制),没有多余数据,因此序列后面拼接序列长度00(二进制为0000,占用空间
Figure GSB00000631724500102
位),即序列经过预处理后变为:
二进制:110001100001100001001101;101101110101100001001101;0000
四进制:301201201031;231311201031;00
设初始密钥K0为:2,0,3,1。则对于第1组分组序列为3,0,1,2,0,1,2,0,1,0,3,1(110001100001100001001101),各密钥元素数目分别为:2,4,2,4,可以算出最大序数为
Figure GSB00000631724500103
(32C1B,占用18位,也就是说在下面加密过程中,最终得到的和所占空间不超过18位)。
主要的比例加密算法的计算过程为:
设分组序列为3,0,1,2,0,1,2,0,1,0,3,1,对应的密钥序列中元素顺序为:2,0,3,1,通常将密钥序列第一元素(本例为2,从0计数,其在序列中的位置值为6,占用空间长度
Figure GSB00000631724500104
表示为0110)与分组序列的最后一个元素进行置换,并记录被置换到分组序列最后位置元素的原始位置,这样形成新的分组序列为:3,0,1,2,0,1,1,0,1,0,3,2,分组序列中含有对应密钥序列各元素的数目分别为:2,4,2,4,分组序列总的排列组合数为
Figure GSB00000631724500111
即分组序列未处理任何元素前的排列组合数S0,1=Q=207900。
(1)处理第1个元素:第1组分组序列的第1个元素为3,在与其对应的密钥序列(初始密钥K0)中,3前面有的元素有2和0。
1)首先计算第一个假设元素为2时,排列组合数为:
S 1,1 = Q × w s n ′ = 207900 * ( 2 / 12 ) = 207900 * 2 / 12 = 34650
2)计算本组所有组合数
Σ x = 1 i - 1 S 1 , x = ( S 1 , 1 × Σ k = 1 i - 1 w k ) / w 1 = 34650 * ( 2 + 4 ) / 2 = 103950
处理完第1个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为2,4,1,4。
(2)处理第2个元素:第1组分组序列的第2个元素为0,在与其对应的密钥序列(初始密钥K0)中,0前面有的元素为2。
1)计算第二个假设元素为2时,排列组合数为:
S 2,1 = S 1,1 × w i n ′ = 34650 * ( 2 / 11 ) = 6300
2)计算本组所有组合数
Σ x = 1 i - 1 S 2 , x = ( S 1 , 1 * Σ k = 1 i - 1 w k ) / w 1 = 6300 * ( 2 / 2 ) = 6300
处理完第2个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为2,3,1,4。
(3)处理第3个元素:第1组分组序列的第3个元素为1,在与其对应的密钥序列(初始密钥K0)中,1前面有2,0,3。
1)计算第三个假设元素为2时,排列组合数为:
S 3 , 1 = S 2 , 1 × w i n ′ = 6300 * ( 4 / 10 ) = 6300 * 4 / 10 = 2520
2)计算本组所有组合数:
Σ x = 1 i - 1 S 3 , x = ( S 3,1 * Σ k = 1 i - 1 w k ) / w 1 = 2520 * ( ( 2 + 3 + 1 ) / 2 ) = 2520 * ( 6 / 2 ) = 7560
处理完第3个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为2,3,1,3。
(4)处理第4个元素:第1组分组序列的第4个元素为2,在与其对应的密钥序列(初始密钥K0)中,无其它元素,不处理。
此时,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,3,1,3。
(5)处理第5个元素:第1组分组序列的第5个元素为0,在与其对应的密钥序列(初始密钥K0)中,0前面有的元素为2。
由于第4个元素是密钥序列中第一个元素,是特殊处理的情况,应该根据如下公式计算第一个假设元素为2时的排列组合数目:
1)计算第五个假设元素为2时,排列组合数为:
S 5 , 1 = S 3 , 1 × w i m × m ! / ( m - empty - 1 ) ! n ′ ! / ( n ′ - empty - 1 ) !
= 2520 * ( 4 / 2 ) ( ( 2 * ( 2 - 1 ) ) / ( 9 * ( 9 - 1 ) ) ) = 2520 * 2 * 2 / 72 = 140
其中,empty=1。
2)计算本组所有组合数:
Σ x = 1 i - 1 S 5 , x = ( S 5 , 1 * Σ k = 1 i - 1 w k ) / w 1 = 140 * ( 1 / 1 ) = 140
处理完第5个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,2,1,3。
(6)处理第6个元素:第1组分组序列的第6个元素为1,在与其对应的密钥序列(初始密钥K0)中,1前面有的元素为2,0,3。
1)计算第六个假设元素为2时,排列组合数为:
S 6 , 1 = S 5,1 × w i n ′ = 140 * ( 3 / 7 ) = 140 * 3 / 7 = 60
2)计算本组所有组合数:
Σ x = 1 i - 1 S 6 , x = ( S 6 , 1 * Σ k = 1 i - 1 w k ) / w 1 = 60 * ( ( 1 + 2 + 1 ) / 1 ) = 60 * 4 / 1 = 240
处理完第6个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,2,1,2。
(7)处理第7个元素:第1组分组序列的第7个元素为1,在与其对应的密钥序列(初始密钥K0)中,1前面有的元素有2,0,3。
1)计算第七个假设元素为2时,排列组合数为:
S 7 , 1 = S 6 , 1 × w i n ′ = 60 * ( 3 / 6 ) = 60 * 3 / 6 = 30
2)计算本组所有组合数:
Σ x = 1 i - 1 S 7 , x = ( S 7 , 1 * Σ k = 1 i - 1 w k ) / w 1 = 30 * ( ( 1 + 2 + 1 ) / 1 ) = 30 * 4 / 1 = 120
处理完第7个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,2,1,1。
(8)处理第8个元素:第1组分组序列的第8个元素为0,在与其对应的密钥序列(初始密钥K0)中,0前面有的元素有2。
1)计算第八个假设元素为2时,排列组合数为:
S 8 , 1 = S 7 , 1 × w i n ′ = 30 * ( 2 / 5 ) = 12
2)计算本组所有组合数
因为只有一个元素2,所以本组所有组合数也为12。
处理完第8个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,1,1,1。
(9)处理第9个元素:第1组分组序列的第9个元素为1,在与其对应的密钥序列(初始密钥K0)中,1前面有的元素有2,0,3。
1)计算第九个假设元素为2时,排列组合数为:
S 9 , 1 = S 8 , 1 × w i n ′ = 12 * ( 2 / 4 ) = 12 * 2 / 4 = 6
2)计算本组所有组合数
Σ x = 1 i - 1 S 9 , x = ( S 9 , 1 * Σ k = 1 i - 1 w k ) / w 1 = 6 * ( ( 1 + 1 + 1 ) / 1 ) = 6 * 3 / 1 = 18
处理完第9个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,1,1,0。
(10)处理第10个元素:第1组分组序列的第10个元素为0,在与其对应的密钥序列(初始密钥K0)中,0前面有的元素有2。
1)计算第十个假设元素为2时,排列组合数为:
S 10 , 1 = S 9 , 1 × w i n ′ = 6 * ( 1 / 3 ) = 2
2)计算本组所有组合数
Σ x = 1 i - 1 S 10 , x = ( S 10 , 1 * Σ k = 1 i - 1 w k ) / w 1 = 2 * ( 1 / 1 ) = 2
处理完第10个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,0,1,0。
(11)处理第11个元素:第1组分组序列的第11个元素为3,在与其对应的密钥序列(初始密钥K0)中,3前面有的元素有2。
1)计算第十一个假设元素为2时,排列组合数为:
S 11 , 1 = S 10 , 1 × w i n ′ = 2 * ( 1 / 2 ) = 1
2)计算本组所有组合数:1
处理完第11个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,0,0,0。
(12)最后一个元素不需要考虑。
将上述过程中各步骤的第2)部分所得值累加,便得到所求序数:
N00=118343(十六进制:1CE47)转换为18位二进制数据为011100111001000111。
对于第2组分组序列2,3,1,3,1,1,2,0,1,0,3,1来说,可以由初始密钥K0[2,0,3,1]按照先循环左移后置换推出:
Figure GSB00000631724500144
所以第2组的分组密钥K1为[0,2,3,1],其第一元素为0,因此序列中最后一个0(位置值1001)与最后元素交换后,得到新序列:2,3,1,3,1,1,2,0,1,1,3,0。各元素数目分别为2,2,3,5,可以算出最大序数为
Figure GSB00000631724500151
(289AF,18位,也就是说在其加密算法中,最终得到的和所占空间不超过18位),Q=P+1=166320。具体计算过程类似第1组分组序列的计算,最后得到和为41051(A05B)作为第2组分组序列的序数N10,转换为18位二进制数据为001010000001011011。
最后要将两组数据(包括各组被置换的密钥第一元素的原始位置、各密钥元素数目及序数值)以及本轮余数部分数据的数目进行拼接形成新的序列,与各组的密钥循环异或后,还可以反向变换(二进制序列首尾数据交换,仅在奇数轮时实施)以便进行下一轮加密,而第m组轮密钥则可以遵循先置换再循环左移的策略。共进行四轮变换。
数据拼接:第1组最后一个密钥第一元素位置0110,0123数目分别为4,4,2,2(可以通过12-4-4-2算出,不必存储)。
第二组最后一个密钥第一元素位置1001,0123数目分别为2,5,2,3(可以通过12-2-5-2算出,不必存储)。
存储密钥元素数目时,本例中逢3倍数则增加位数,如10为2,1100为3,1110为5,111100为6……
这样拼接序列为(二进制):
011011011101100111001110010001111001101110100010100000010110110000;
123131213032101321232202200112300
转换为四进制并重新分组(n=12):
123131213032;101321232202;200112300
拼接余数部分数据的数目(9个,占
Figure GSB00000631724500152
位,二进制为1001,四进制为21)后:
123131213032;101321232202;20011230021
上述序列二进制形式为
0110110111011001110011100100011110011011101000101000000101101100001001
与各组的密钥(2031 0231即10001101 00101101)循环异或:
011011011101100111001110010001111001101110100010100000010110110000100110001101001011011000110100101101100011010010110110001101001011011000111110000011110100010000110110101000010110100011110000110001000001101010
在对其进行第二轮(偶数轮)变换计算前,还需要将其反向操作:
0101011000001000110000111100010110100001010110110000100010111100000111
这样便得到第二轮进行变换的序列,转换4进制形式为:
11120020300330112201112300202330013
上述序列仍可以分为长度为n=12(四进制)的两组数据,以便进行下一轮加密:
111200203003,301122011123,00202330013
(多余数据00202330013,其长度小于n,将不作处理,组合加密技术加密后数据量会增加,但是随着密钥单位长度和分组长度的增加,所增加数据量会相对变小。)
而第二轮子密钥分别为:
子密钥1:
Figure GSB00000631724500161
子密钥2:
Figure GSB00000631724500162
接下来便可以进行第二轮变换。
第三轮子密钥分别为:
子密钥1:
Figure GSB00000631724500163
子密钥2:
Figure GSB00000631724500164
第四轮子密钥分别为:
子密钥1:
Figure GSB00000631724500171
子密钥2:
Figure GSB00000631724500172
总共需要进行四轮变换。
具体实施方式二:下面结合图2和图3说明本实施方式,一种基于组合编码的文件解密的方法包括以下步骤:
已知该文件在第一轮加密时,第1组分组序列的分组密钥为初始密钥K0,初始密钥K0的单位长度为k比特,已知该文件的被加密轮数为w轮,本方法的解密从第w轮开始,
一种基于组合编码的文件解密的方法包括以下步骤:
步骤1、根据所述初始密钥K0确定第一轮加密时所有组的分组密钥Km-1
步骤2、根据分组密钥Km-1确定该组所有轮加密时的子密钥K(m-1)(w-1)
步骤3、初始化被加密的轮数w=4,
步骤4、判断w是否为奇数,
判断结果为是,执行步骤5,判断结果为否,执行步骤6,
步骤5、将待解密文件的所有元素的位置前后倒置,作为本轮的待解密文件,
步骤6、将该轮所有组的密钥序列进行循环拼接,使其长度与本轮的待解密文件的长度相同,然后与本轮的待解密文件进行异或,异或结果作为该轮待解密文件,
步骤7、将该轮待解密文件根据相关标志进行分组,形成m组数据,相关标志包括分组序列中被置换到最后位置的元素的原始位置、密钥各元素数目和序数长度,
步骤8、通过步骤7每组数据中分组序列中被置换到最后位置的元素的原始位置、含对应密钥各元素的数目、分组序列的序数和余数长度信息,逐个解析步骤7获得的m组数据,
步骤9、按照当前分组序列对应的密钥序列中元素的顺序,采用穷举方法解析该组分组序列的数据,将解析完毕的m个分组序列及余数进行拼接,作为下一轮待解密文件,
步骤10、判断是否满足下述条件:w≤1,
判断结果为否,令w=w-1,执行步骤4,判断结果为是,将本轮形成的解密文件作为最终结果,完成对文件的解密。
步骤1中的分组密钥Km-1的获取方法为:
第一轮加密时,每组分组密钥Km-1将其前一组密钥序列的数据先循环右移或左移一位,形成待用密钥序列,然后采用数据替代法生成当前组的分组密钥Km-1
采用数据替代法生成当前组的分组密钥Km-1的过程为:找到所述待用密钥序列的第x号位置数据y,再寻找待用密钥序列第y号位置的数据z,将数据z作为当前组的分组密钥Km-1第x号位置的数据;
步骤2中的子密钥K(m-1)(w-1)的获取方法为:
第m-1组的子密钥K(m-1)(w-1)根据当前组的前一轮的分组密钥采用数据替代法生成,具体过程为:
令第m-1组的前一轮的分组密钥作为待用密钥序列,
找到所述待用密钥序列的第x号位置数据y,再寻找待用密钥序列第y号位置的数据z,将数据z作为当前第m-1组的子密钥K(m-1)(w-1)第x号位置的数据,形成新的序列,
然后将所述新的序列的数据循环右移或左移一位作为第m-1组的子密钥K(m-1)(w-1)
步骤8中分组序列的序数所占位数与当前组的分组序列的最大序数P所占位数相同,最大序数P按下述公式获取:
P = C 2 k n 1 × C 2 k - n 1 n 2 × C 2 k - n 1 - n 2 n 3 × . . . . . . × C n 2 k n 2 k - 1 , P ≥ 0 ,
当前组的分组序列中含有对应的密钥序列中各密钥元素的数目分别为:n1,n2,......,
步骤9所述的下一轮待解密文件的获取过程为:
按照当前分组序列对应的密钥序列的顺序,采用穷举方法解析该组分组序列的数据,将解析完毕的m个分组序列及余数进行拼接,
按照该组分组序列对应的密钥序列中元素的顺序来假定被测位置的元素,然后根据假定元素,并根据下述公式获取相应排列组合值ph(j,x):
ph(j,x)=Sj,x
其中,
Figure GSB00000631724500191
wx为密钥序列中x位置的元素在分组序列中未经处理的数目,
第j位置元素的排列组合值Sj,1由下式获取:
S j , 1 = S j - 1 - empty , 1 × w i m × m ! / ( m - empty - 1 ) ! n ′ ! / ( n ′ - empty - 1 ) ! , j > 1 ,
其中,wi为分组序列中第j元素前的最近的被处理元素的数目,wi在密钥序列中排在第i位,m表示处理第j-1-empty元素时密钥序列第一元素在分组序列中的剩余数目,n′为处理第j元素时,包括j元素本身在内的所有剩余元素数目,empty表示分组序列中第j元素之前连续不作处理的元素个数,
分组序列中的第一元素不是密钥第一元素时,假设该分组序列对应的密钥序列中第一个元素占用分组序列的第1位置时的排列组合值
Figure GSB00000631724500193
其中,w1为分组序列中对应密钥序列第1个元素未被处理的数目,
分组序列中自第1至第j-1位置的元素是否都与密钥第一元素相同时,假设该分组序列对应的密钥序列中第一个元素占用分组序列的第j位置时求取其排列组合值 S j , 1 = Q × m ! / ( m - empty - 1 ) ! n ′ ! / ( n ′ - empty - 1 ) ! ,
h=1,2,……,p1(j,x)、p2(j,x)、……分别代表假定被测位置的元素为所述密钥序列中第1元素时的排列组合值、假定被测位置的元素为所述密钥序列中第2元素时的排列组合值……
其中,j表示当前被处理元素在分组序列中的位置,i表示当前被处理元素在当前组对应的密钥序列中的位置,wx为密钥序列中x位置的元素在分组序列中未经处理的数目,q表示除了x以外的元素的位置,wq是各个元素数目减去前面j个字符中已经出现过的相应元素的数目,ii表示分组序列中密钥元素数目不为零的密钥元素总数,
当h=1,让p1(j,x)与当前组的分组序列的序数进行比较,若序数大于等于p1(j,x),则计算假定被测位置的元素为所述密钥序列中第2元素时的排列组合值p2(j,x),判断序数是否大于等于p1(j,x)+p2(j,x)......直到判断出序数小于某个p1(j,x)+p2(j,x)+......+pr(j,x),此时pr(j,x)对应的密钥密序列中的假定元素就是该位置拥有的元素,并将当前分组序列拥有该元素的数目自减1,
按如下公式计算出当前组分组序列的新的序数,用于下一位置的元素的确定:
新的序数=原有序数-(p1(j,x)+p2(j,x)+......+pr-1(j,x)),
依此类推,解析出当前组分组序列中的所有元素,
进而,将解析完毕的m个分组序列及余数进行拼接,作为下一轮待解密文件。
解密基本上是加密的逆过程。
主要解密算法(仍以第一轮第一组算法为例,其它轮类似),下面给出一个具体的实施例:
第一轮最终数据序列(待解密序列)为:
0101011000001000110000111100010110100001010110110000100010111100000111
w为奇数轮时,需反向置换操作,如w为偶数轮,则无需反向置换操作:假定此时w为奇数轮,则反向置换为:
1110000011110100010000110110101000010110100011110000110001000001101010
与各组的密钥(20310231即1000110100101101)循环异或:
111000001111010001000011011010100001011010001111000011000100000110101010001101001011011000110100101101100011010010110110001101001011011000110110110111011001110011100100011110011011101000101000000101101100001001
解析上述序列:
0110:第一组序列中最后一个密钥第一元素位置为6
1101:4;1101:4;10:2,
因此第一组密钥元素0123数目分别为4,4,2,2(最后元素3的数目由12-4-4-2算出)
由最大序数
Figure GSB00000631724500201
(32C1B,18位)可以计算出由这12个元素确定的所有序列数目为207900。并且序列中紧随密钥元素数目后面的18位为第一组数据序数所占空间:011100111001000111(十六进制:1CE47;十进制:118343)
根据序列总数207900、序数以及密钥(2031,数目分别为2,4,2,4)解析原序列过程如下:
(1)解析第一个元素
1)若第一元素为2,
S 1,1 = Q &times; w s n &prime; = 207900 * ( 2 / 12 ) = 207900 * 2 / 12 = 34650 < 118343 , 所以不是2。
2)若第一元素为0,根据式子(4)可以得到:
S 2,1 = S 1,1 &times; w i n &prime; = 34650 * ( 4 / 2 ) = 69300
34650+69300=103950<118343,所以不是0。
3)若第一个元素为3:
S 3 , 1 = S 2,1 &times; w i n &prime; = 34650 * ( 2 / 2 ) = 34650
34650+69300+34650=138600>118343,所以第一元素是3。
调整序数:118343-103950=14393
处理完第1个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为2,4,1,4。
(2)解析第二个元素
1)若第二元素为2:
S 2,1 = S 1,1 &times; w i n &prime; = 34650 * ( 2 / 11 ) = 6300 < 14393 , 所以不是2。
2)若第二元素为0: S 2,2 = S 2,1 &times; w 2 w 1 = 6300 * ( 4 / 2 ) = 12600
6300+12600>14393,所以第二元素是0。
调整序数:14393-6300=8093
处理完第2个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为2,3,1,4。
(3)解析第三个元素
1)若第三元素为2,
S 3,1 = S 2,1 &times; w i n &prime; = 6300 * ( 4 / 10 ) = 6300 * 4 / 10 = 2520 < 8093 , 所以不是2。
2)若第三元素为0: S 3,2 = S 3,1 &times; w 2 w 1 = 2520 * ( 3 / 2 ) = 2520 * 3 / 2 = 3780 ,
2520+3780<8093,所以不是0。
3)若第三元素为3: S 3,3 = S 3,1 &times; w 3 w 1 = 2520 * ( 1 / 2 ) = 2520 * 1 / 2 = 1260 ,
2520+3780+1260=7560<8093,所以不是3。
4)若第三元素为1: S 3,4 = S 3,1 &times; w 4 w 1 = 2520 * ( 4 / 2 ) = 2520 * 4 / 2 = 5040 ,
2520+3780+1260+5040>8093,所以第三元素是1。
调整序数:8093-7560=533
处理完第3个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为2,3,1,3。
(4)解析第四个元素
1)若第四元素为2, S 4 , 1 = S 3 , 1 &times; w i n &prime; = 2520 * ( 4 / 9 ) = 1120 > 533 , 所以第四元素是2。
不需要调整序数。
此时,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,3,1,3。
(5)解析第五个元素
由于第四个元素是密钥序列中第一个元素,是特殊处理的情况,应该根据如下公式计算第五个元素为2时的排列组合数目:
1)若第五个元素为2时,排列数目为:
S 5 , 1 = S 3 , 1 &times; w i m &times; m ! / ( m - empty - 1 ) ! n &prime; ! / ( n &prime; - empty - 1 ) !
= 2520 * ( 4 / 2 ) ( ( 2 * ( 2 - 1 ) ) / ( 9 * ( 9 - 1 ) ) ) = 2520 * 2 * 2 / 72 = 140 < 533 , 所以不是2。
2)若第五个元素为0: S 5,2 = S 5,1 &times; w 2 w 1 = 140 * ( 3 / 1 ) = 420
140+420>533,所以第五个元素是0。
调整序数:533-140=393
处理完第5个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,2,1,3。
(6)解析第六个元素
1)若第六个元素为2: S 6 , 1 = S 5 , 1 &times; w i n &prime; = 140 * ( 3 / 7 ) = 140 * 3 / 7 = 60 < 393 , 所以不是2。
2)若第六个元素为0: S 6,2 = S 6,1 &times; w 2 w 1 = 60 * ( 2 / 1 ) = 120 , 60+120=180<393,所以不是0。
3)若第六元素为3: S 6,3 = S 6,1 &times; w 3 w 1 = 60 * ( 1 / 1 ) = 60 , 60+120+60=240<393,所以不是3。
4)若第六元素为1: S 6,4 = S 6,1 &times; w 4 w 1 = 60 * ( 3 / 1 ) = 180 , 60+120+60+180>393,第六元素是1。
调整序数:393-240=153
处理完第6个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,2,1,2。
(7)解析第七个元素
1)若第七元素为2, S 7 , 1 = S 6 , 1 &times; w i n &prime; = 60 * ( 3 / 6 ) = 30 < 153 , 所以不是2。
2)若第七元素为0: S 6,3 = S 6,1 &times; w 3 w 1 = 30 * ( 2 / 1 ) = 60 , 30+60=90<153,所以不是0。
3)若第七元素为3: S 7,3 = S 7,1 &times; w 3 w 1 = 30 * ( 1 / 1 ) = 30 , 30+60+30=120<153,所以不是3。
4)若第七元素为1: S 7,4 = S 7,1 &times; w 4 w 1 = 30 * ( 2 / 1 ) = 60 , 30+60+30+60=180>153,所以是1。
调整序数:153-120=33
处理完第7个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,2,1,1。
(8)解析第八个元素
1)若第八元素为2, S 8 , 1 = S 7 , 1 &times; w i n &prime; = 30 * ( 2 / 5 ) = 12 < 33 , 所以不是2。
2)若第八元素为0, S 8,2 = S 8,1 &times; w 2 w 1 = 12 * ( 2 / 1 ) = 24 , 12+24=36>33,所以是0。
调整序数:33-12=21
处理完第8个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,1,1,1。
(9)解析第九个元素
1)若第九元素为2: S 9 , 1 = S 8 , 1 &times; w i n &prime; = 12 * ( 2 / 4 ) = 12 * 2 / 4 = 6 < 21 , 所以不是2。
2)若第九元素为0: S 9,2 = S 9,1 &times; w 2 w 1 = 6 * ( 1 / 1 ) = 6 , 6+6=12<21,所以不是0。
3)若第九元素为3: S 9,3 = S 9,1 &times; w 3 w 1 = 6 * ( 1 / 1 ) = 6 , 6+6+6=18<21,所以不是3。
4)若第九元素为1: S 9,4 = S 9,1 &times; w 4 w 1 = 6 * ( 1 / 1 ) = 6 , 6+6+6+6=24>21,所以是1
调整序数:21-18=3。
处理完第9个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,1,1,0。
(10)解析第十个元素
1)若第十元素为2: S 10 , 1 = S 9 , 1 &times; w i n &prime; = 6 * ( 1 / 3 ) = 2 < 3 , 所以不是2。
2)若第十元素为0: S 10,2 = S 10,1 &times; w 2 w 1 = 2 * ( 1 / 1 ) = 2 , 2+2=4>3,所以是0。
调整序数:3-2=1
处理完第10个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,0,1,0。
(11)解析第十一个元素
1)若第十一元素为2: S 11 , 1 = S 10 , 1 &times; w i n &prime; = 2 * ( 1 / 2 ) = 1 , 1=1,所以不是2。
2)由于此时序列中已经没有0元素,即密钥元素计数中0元素数目已经耗尽,因此不考虑。
3)若第十一元素为3: S 11,3 = S 11,1 &times; w 3 w 1 = 1 * ( 1 / 1 ) = 1 , 1+1=2>1,所以是3。
调整序数:1-1=0
处理完第11个元素后,分组序列含有密钥序列[2,0,3,1]各元素的数目变为1,0,0,0。
当序数为0时,算法结束,密钥序列中所有不为零的元素依次为序列剩余元素。本例为2。
这样,便推算出所求序列为:301201101032,而最后一个密钥第一元素位置为6,因此将序列最后一个元素与该位置元素交换,得到最初第一组序列为301201201031。
同理,可以解析出第二组序列为:231311201130,而最后一个密钥第一元素位置为9,因此将序列最后一个元素与该位置元素交换,得到最初第一组序列为231311201031。
由解密序列二进制形式最后4位1001可知余数部分含9位四进制数,表明第二轮解密时多余数据不需要解码。而最后4位的前4位为0000,表明原始序列由2个整分组数据组成,没有余数部分。
拼接两组数据恢复原始序列为301201201031231311201031,二进制形式为:
110001100001100001001101101101110101100001001101。
以此类推,获得最终的解密文件。

Claims (10)

1.一种采用比例计算的基于组合编码的文件加密的方法,其特征在于,
设定第一轮加密时,第1组分组序列的分组密钥为初始密钥K0,初始密钥K0的单位长度为k比特,每轮加密时都将待加密文件按组长度为n分成m组分组序列和一个余数,一种基于组合编码的文件加密的方法包括以下步骤:
步骤一、根据所述初始密钥K0确定第一轮加密时所有组的分组密钥Km-1
步骤二、根据分组密钥Km-1确定该组所有轮加密时的子密钥K(m-1)(w-1),w为文件加密轮数,
步骤三、初始化加密的轮数w=1,
步骤四、将待加密文件按组长度为n进行分组,
每组分组序列的元素数目为n,每个元素的单位长度为k比特,
步骤五、找到密钥序列的第一个元素在与其对应的分组序列中最后一次出现的位置,并将分组序列中该位置的元素与分组序列的最后一个元素进行置换,形成新的分组序列,对新形成的每组分组序列的数据进行全排列,形成字典空间C(m-1)(w-1),然后按如下公式求取新形成的每组分组序列在各自字典空间中的序数N(m-1)(w-1)
N ( m - 1 ) ( w - 1 ) = &Sigma; j = 1 n &Sigma; x = 1 i - 1 S j , x ,
其中,j表示当前被处理元素在分组序列中的位置,i表示当前被处理元素在当前组对应的密钥序列中的位置,密钥序列的前i-1个元素中每个位置为x的元素占有分组序列第j位时应有的排列组合值用Sj,x表示,N(m-1)(w-1)≥0,
步骤六、按分组序列中被置换到最后位置的元素的原始位置+分组序列含对应密钥各元素的数目+分组序列的序数的原则将当前轮各组序列进行重新拼接,结尾处加入余数长度,形成新的待加密文件,
即,新的待加密文件拼接为:
第1组分组序列中被置换到最后位置的元素的原始位置+第1组分组序列含对应密钥各元素的数目+第1组分组序列的序数N0(w-1)
+第2组分组序列中被置换到最后位置的元素的原始位置+第2组分组序列含对应密钥各元素的数目+第2组分组序列的序数N1(w-1)
+……
+第m组分组序列中被置换到最后位置的元素的原始位置+第m组分组序列含对应密钥各元素的数目+第m组分组序列的序数N(m-1)(w-1)
+余数长度,
步骤七、将该轮所有组的密钥序列进行循环拼接,使其长度与步骤六形成的新的待加密文件的长度相同,然后与步骤六形成的新的待加密文件进行异或,结果作为下一轮的待加密文件,
步骤八、判断w是否为奇数,
判断结果为是,执行步骤九,判断结果为否,执行步骤十,
步骤九、将步骤七形成的下一轮的待加密文件中所有元素的位置前后置换,作为该轮形成的加密文件,并作为下一轮待加密文件,
步骤十、判断是否满足下述条件:w≥4,
判断结果为否,令w=w+1,执行步骤四,判断结果为是,将本轮形成的加密文件作为最终结果,完成对文件的加密。
2.根据权利要求1所述的采用比例计算的基于组合编码的文件加密的方法,其特征在于,步骤一中的分组密钥Km-1的获取方法为:
第一轮加密时,每组分组密钥Km-1将其前一组密钥序列的数据先循环右移或左移一位,形成待用密钥序列,然后采用数据替代法生成当前组的分组密钥Km-1
采用数据替代法生成当前组的分组密钥Km-1的过程为:找到所述待用密钥序列的第x号位置数据y,再寻找待用密钥序列第y号位置的数据z,将数据z作为当前组的分组密钥Km-1第x号位置的数据。
3.根据权利要求1所述的采用比例计算的基于组合编码的文件加密的方法,其特征在于,步骤二中的子密钥K(m-1)(w-1)的获取方法为:
第m-1组的子密钥K(m-1)(w-1)根据当前组的前一轮的分组密钥采用数据替代法生成,具体过程为:
令第m-1组的前一轮的分组密钥作为待用密钥序列,
找到所述待用密钥序列的第x号位置数据y,再寻找待用密钥序列第y号位置的数据z,将数据z作为当前第m-1组的子密钥K(m-1)(w-1)第x号位置的数据,形成新的序列,
然后将所述新的序列的数据循环右移或左移一位作为第m-1组的子密钥K(m-1)(w-1)
4.根据权利要求1所述的采用比例计算的基于组合编码的文件加密的方法,其特征在于,步骤五中字典空间C(m-1)(w-1)含有
Figure FSB00000631724400031
个不同的排列,n1、n2、...、
Figure FSB00000631724400032
为当前组的分组序列中含有对应的密钥序列中各密钥元素的数目。
5.根据权利要求1所述的采用比例计算的基于组合编码的文件加密的方法,其特征在于,步骤五序数N(m-1)(w-1)的获取过程为:
步骤a、获取分组序列进行全排列的最大组合数Q:
Q=P+1,
其中,P为分组序列进行全排列的最大序数,并按如下公式获取:
P = C 2 k n 1 &times; C 2 k - n 1 n 2 &times; C 2 k - n 1 - n 2 n 3 &times; . . . . . . &times; C n 2 k n 2 k - 1 , P &GreaterEqual; 0 ,
当前组的分组序列中含有对应的密钥序列中各密钥元素的数目分别为:n1,n2,......,
Figure FSB00000631724400034
序数N(m-1)(w-1)所占位数与当前组的分组序列的最大序数P所占位数相同,
步骤b、逐一处理分组序列中的各元素,初始化j=1,j为分组序列中的各元素的位置,分组序列中的第一元素是密钥第一元素时,不作处理;
分组序列中的第一元素不是密钥第一元素时,假设该分组序列对应的密钥序列中第一个元素占用分组序列的第1位置时的排列组合值S1,1为:
S 1,1 = Q &times; w 1 n &prime;
其中,w1为分组序列中对应密钥序列第1个元素未被处理的数目,n′为处理第j元素时,包括j元素本身在内的所有剩余元素数目,
步骤c、j=j+1,
步骤d、判断j位置元素在该分组序列对应的密钥序列中的位置是否为第一位,
判断结果为是,该位置元素不作处理,然后返回执行步骤c,当分组序列中所有元素都判断完毕后跳出程序,判断结果为否,执行步骤e,
步骤e、判断分组序列中自第1至第j-1位置元素是否都与密钥第一元素相同,判断结果为是,假设该分组序列对应的密钥序列中第一个元素占用分组序列的第j位置时求取其排列组合值Sj,1
S j , 1 = Q &times; m ! / ( m - empty - 1 ) ! n &prime; ! / ( n &prime; - empty - 1 ) !
其中,m表示处理第j-1-empty元素时密钥序列第一元素在分组序列中的剩余数目,empty表示分组序列中第j元素之前连续不作处理的元素个数,
判断结果为否,假设该分组序列对应的密钥序列中第一个元素占用分组序列的第j位置时求取其排列组合值Sj,1
S j , 1 = S j - 1 - empty , 1 &times; w i m &times; m ! / ( m - empty - 1 ) ! n &prime; ! / ( n &prime; - empty - 1 ) !
其中,wi为分组序列中第j元素前的最近的被处理元素的数目,wi在密钥序列中排在第i位,
步骤f、获取处理第j元素的总排列组合值:
&Sigma; x = 1 i - 1 S j , x = ( S j , 1 &times; &Sigma; k = 1 i - 1 w k ) / w 1 ,
wk表示分组序列中对应密钥序列前i-1个元素中各个元素的数目,
重复执行步骤c至步骤f,直至将分组序列中所有元素处理完毕,
步骤g、获取分组序列在各自字典空间中的序数N(m-1)(w-1)
N ( m - 1 ) ( w - 1 ) = &Sigma; j = 1 n &Sigma; x = 1 i - 1 S j , x .
6.根据权利要求1所述的采用比例计算的基于组合编码的文件加密的方法,其特征在于,步骤六中按分组序列含对应密钥各元素的数目的存储格式为:
按照密钥序列中元素大小的顺序进行存储,设定密钥序列中元素的数目为a,如果某元素数目每达到2k-1的倍数,便增加k位,存储前a-1个密钥元素的数目,最后一个元素数目由分组序列长度减去已经存储的前a-1个密钥元素数目获得。
7.根据权利要求1所述的采用比例计算的基于组合编码的文件加密的方法,其特征在于,步骤六中余数长度为:
Figure FSB00000631724400051
8.一种采用比例计算的基于组合编码的文件解密的方法,其特征在于,该方法包括以下步骤:
已知该文件在第一轮加密时,第1组分组序列的分组密钥为初始密钥K0,初始密钥K0的单位长度为k比特,已知该文件的被加密轮数为w轮,本方法的解密从第w轮开始,
一种基于组合编码的文件解密的方法包括以下步骤:
步骤1、根据所述初始密钥K0确定第一轮加密时所有组的分组密钥Km-1
步骤2、根据分组密钥Km-1确定该组所有轮加密时的子密钥K(m-1)(w-1)
步骤3、初始化被加密的轮数w=4,
步骤4、判断w是否为奇数,
判断结果为是,执行步骤5,判断结果为否,执行步骤6,
步骤5、将待解密文件的所有元素的位置前后倒置,作为本轮的待解密文件,
步骤6、将该轮所有组的密钥序列进行循环拼接,使其长度与本轮的待解密文件的长度相同,然后与本轮的待解密文件进行异或,异或结果作为该轮待解密文件,
步骤7、将该轮待解密文件根据相关标志进行分组,形成m组数据,相关标志包括分组序列中被置换到最后位置的元素的原始位置、密钥各元素数目和序数长度,
步骤8、通过步骤7每组数据中分组序列中被置换到最后位置的元素的原始位置、含对应密钥各元素的数目、分组序列的序数和余数长度信息,逐个解析步骤7获得的m组数据,
步骤9、按照当前分组序列对应的密钥序列中元素的顺序,采用穷举方法解析该组分组序列的数据,将解析完毕的m个分组序列及余数进行拼接,作为下一轮待解密文件,
步骤10、判断是否满足下述条件:w≤1,
判断结果为否,令w=w-1,执行步骤4,判断结果为是,将本轮形成的解密文件作为最终结果,完成对文件的解密。
9.根据权利要求8所述的采用比例计算的基于组合编码的文件解密的方法,其特征在于,步骤1中的分组密钥Km-1的获取方法为:
第一轮加密时,每组分组密钥Km-1将其前一组密钥序列的数据先循环右移或左移一位,形成待用密钥序列,然后采用数据替代法生成当前组的分组密钥Km-1
采用数据替代法生成当前组的分组密钥Km-1的过程为:找到所述待用密钥序列的第x号位置数据y,再寻找待用密钥序列第y号位置的数据z,将数据z作为当前组的分组密钥Km-1第x号位置的数据;
步骤2中的子密钥K(m-1)(w-1)的获取方法为:
第m-1组的子密钥K(m-1)(w-1)根据当前组的前一轮的分组密钥采用数据替代法生成,具体过程为:
令第m-1组的前一轮的分组密钥作为待用密钥序列,
找到所述待用密钥序列的第x号位置数据y,再寻找待用密钥序列第y号位置的数据z,将数据z作为当前第m-1组的子密钥K(m-1)(w-1)第x号位置的数据,形成新的序列,
然后将所述新的序列的数据循环右移或左移一位作为第m-1组的子密钥K(m-1)(w-1)
步骤8中分组序列的序数所占位数与当前组的分组序列的最大序数P所占位数相同,最大序数P按下述公式获取:
P = C 2 k n 1 &times; C 2 k - n 1 n 2 &times; C 2 k - n 1 - n 2 n 3 &times; . . . . . . &times; C n 2 k n 2 k - 1 , P &GreaterEqual; 0 ,
当前组的分组序列中含有对应的密钥序列中各密钥元素的数目分别为:n1,n2,......,
Figure FSB00000631724400062
10.根据权利要求8所述的采用比例计算的基于组合编码的文件解密的方法,其特征在于,步骤9所述的下一轮待解密文件的获取过程为:
按照当前分组序列对应的密钥序列的顺序,采用穷举方法解析该组分组序列的数据,将解析完毕的m个分组序列及余数进行拼接,
按照该组分组序列对应的密钥序列中元素的顺序来假定被测位置的元素,然后根据假定元素,并根据下述公式获取相应排列组合值ph(j,x):
ph(j,x)=Sj,x
其中,wx为密钥序列中x位置的元素在分组序列中未经处理的数目,第j位置元素的排列组合值Sj,1由下式获取:
S j , 1 = S j - 1 - empty , 1 &times; w i m &times; m ! / ( m - empty - 1 ) ! n &prime; ! / ( n &prime; - empty - 1 ) ! , j > 1 ,
其中,wi为分组序列中第j元素前的最近的被处理元素的数目,wi在密钥序列中排在第i位,m表示处理第j-1-empty元素时密钥序列第一元素在分组序列中的剩余数目,n′为处理第j元素时,包括j元素本身在内的所有剩余元素数目,empty表示分组序列中第j元素之前连续不作处理的元素个数,
分组序列中的第一元素不是密钥第一元素时,假设该分组序列对应的密钥序列中第一个元素占用分组序列的第1位置时的排列组合值
其中,w1为分组序列中对应密钥序列第1个元素未被处理的数目,
分组序列中自第1至第j-1位置元素是否都与密钥第一元素相同时,假设该分组序列对应的密钥序列中第一个元素占用分组序列的第j位置时求取其排列组合值 S j , 1 = Q &times; m ! / ( m - empty - 1 ) ! n &prime; ! / ( n &prime; - empty - 1 ) ! ,
h=1,2,……,p1(j,x)、p2(j,x)、……分别代表假定被测位置的元素为所述密钥序列中第1元素时的排列组合值、假定被测位置的元素为所述密钥序列中第2元素时的排列组合值……
其中,j表示当前被处理元素在分组序列中的位置,i表示当前被处理元素在当前组对应的密钥序列中的位置,wx为密钥序列中x位置的元素在分组序列中未经处理的数目,q表示除了x以外的元素的位置,wq是各个元素数目减去前面j个字符中已经出现过的相应元素的数目,
当h=1,让p1(j,x)与当前组的分组序列的序数进行比较,若序数大于等于p1(j,x),则计算假定被测位置的元素为所述密钥序列中第2元素时的排列组合值p2(j,x),判断序数是否大于等于p1(j,x)+p2(j,x)......直到判断出序数小于某个p1(j,x)+p2(j,x)+......+pr(j,x),此时pr(j,x)对应的密钥密序列中的假定元素就是该位置拥有的元素,并将当前分组序列拥有该元素的数目自减1,
按如下公式计算出当前组分组序列的新的序数,用于下一位置的元素的确定:
新的序数=原有序数-(p1(j,x)+p2(j,x)+......+pr-1(j,x)),
依此类推,解析出当前组分组序列中的所有元素,
进而,将解析完毕的m个分组序列及余数进行拼接,作为下一轮待解密文件。
CN2010102285322A 2010-07-16 2010-07-16 采用比例计算的基于组合编码的文件加密和解密的方法 Expired - Fee Related CN101895389B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010102285322A CN101895389B (zh) 2010-07-16 2010-07-16 采用比例计算的基于组合编码的文件加密和解密的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010102285322A CN101895389B (zh) 2010-07-16 2010-07-16 采用比例计算的基于组合编码的文件加密和解密的方法

Publications (2)

Publication Number Publication Date
CN101895389A CN101895389A (zh) 2010-11-24
CN101895389B true CN101895389B (zh) 2012-06-06

Family

ID=43104468

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010102285322A Expired - Fee Related CN101895389B (zh) 2010-07-16 2010-07-16 采用比例计算的基于组合编码的文件加密和解密的方法

Country Status (1)

Country Link
CN (1) CN101895389B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105187211B (zh) * 2015-08-07 2019-01-22 北京思特奇信息技术股份有限公司 一种消息安全发送接收方法及发送接收装置
GB201519612D0 (en) * 2015-11-06 2015-12-23 Nagravision Sa Key sequence generation for cryptographic operations
CN108206736B (zh) * 2018-01-11 2019-03-15 衡阳师范学院 一种轻量级密码算法HBcipher实现方法与装置
IT201800006911A1 (it) * 2018-07-04 2020-01-04 Metodo di codifica e decodifica di informazioni digitali
CN110019075B (zh) * 2018-08-09 2021-08-10 苏州科达科技股份有限公司 日志加密方法与解密方法及装置
CN110071927B (zh) * 2019-04-28 2021-09-14 苏州国芯科技股份有限公司 一种信息加密方法、系统及相关组件
CN110474876B (zh) * 2019-07-15 2020-10-16 湖南遥昇通信技术有限公司 一种数据编码解码方法、装置、设备以及存储介质
CN112464258B (zh) * 2020-11-02 2024-03-19 中国银联股份有限公司 数据加、解密方法、装置、设备及存储介质
CN114609985B (zh) * 2022-03-11 2024-01-26 傲普(上海)新能源有限公司 一种ems系统的控制方法、装置、介质及设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101237321A (zh) * 2008-02-03 2008-08-06 西北农林科技大学 基于循环队列移位规则的加密方法
CN101237322A (zh) * 2008-02-03 2008-08-06 西北农林科技大学 基于双循环队列移位和换位规则的加密方法
CN101383703A (zh) * 2008-09-12 2009-03-11 华南理工大学 基于广义信息域的动态加密系统及方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101237321A (zh) * 2008-02-03 2008-08-06 西北农林科技大学 基于循环队列移位规则的加密方法
CN101237322A (zh) * 2008-02-03 2008-08-06 西北农林科技大学 基于双循环队列移位和换位规则的加密方法
CN101383703A (zh) * 2008-09-12 2009-03-11 华南理工大学 基于广义信息域的动态加密系统及方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
陆军,刘大昕.组合编码方法的应用研究.《计算机科学》.2010,第37卷(第7A期),第42-44页. *

Also Published As

Publication number Publication date
CN101895389A (zh) 2010-11-24

Similar Documents

Publication Publication Date Title
CN101895389B (zh) 采用比例计算的基于组合编码的文件加密和解密的方法
CN101938350B (zh) 一种基于组合编码的文件加密和解密的方法
CN101764686B (zh) 一种用于网络与信息安全的加密方法
EP3075097B1 (en) Construction and uses of variable-input-length tweakable ciphers
EP2058781B1 (en) Encryption device, encryption method, and computer program
CN107147487B (zh) 对称密钥随机分组密码
CN103444124B (zh) 加密处理装置、加密处理方法
EP2273472A1 (en) Coder equipped with common key code function and built-in equipment
EP2316189B1 (en) Method for generating a cipher-based message authentication code
CN110572255B (zh) 基于轻量级分组密码算法Shadow的加密方法、装置及计算机可读介质
Keliher et al. New method for upper bounding the maximum average linear hull probability for SPNs
JP2004506246A (ja) 対称鍵暗号のための線形変換
WO2013174944A1 (en) Method for generating a pseudorandom sequence, and method for coding or decoding a data stream
CN111245598A (zh) 一种轻量级aerogel分组密码的实现方法
Amorado et al. Enhanced data encryption standard (DES) algorithm based on filtering and striding techniques
CN112287333A (zh) 一种轻量级可调分组密码实现方法、系统、电子设备以及可读存储介质
US7103180B1 (en) Method of implementing the data encryption standard with reduced computation
Wu et al. Integral cryptanalysis of reduced FOX block cipher
CN107493164B (zh) 一种基于混沌系统的des加密方法和系统
CN113691364A (zh) 一种基于位片技术的动态s盒分组密码的加密及解密方法
CN110247754B (zh) 一种分组密码fbc的实现方法及装置
CN109409106B (zh) 一种新型无穷字母表的香农完美保密方法
WO2012060685A1 (en) A method for linear transformation in substitution-permutation network symmetric-key block cipher
Biham et al. Differential cryptanalysis of Q
CN111695129B (zh) 一种能够对抗线性攻击和差分攻击的对称加密方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120606

Termination date: 20160716

CF01 Termination of patent right due to non-payment of annual fee