一种分组加密及解密算法的制作方法

文档序号:7962997阅读:162来源:国知局
专利名称:一种分组加密及解密算法的制作方法
技术领域
本发明涉及一种分组加密及解密算法,属于数字防伪和信息安全技术领域。
背景技术
密码技术是研究加密和解密变换的一门科学技术。一般将待加密保护的文件称为明文,将加密变换后的文件称为密文。把明文变换成密文的过程叫加密,将密文变换成明文的过程称为解密。明文与密文的相互变换是可逆的,并且只存在唯一的、无误差的可逆变换。对明文进行加密时所用的变换规则叫加密算法,对密文进行解密时所用的变换规则叫解密算法,加密算法和解密算法统称为密码算法。通常,加密算法和解密算法都是在密钥的控制下进行,用以增加变换的多样性。加密算法所用密钥(加密密钥)与解密算法所用密钥(解密密钥)相同的密码算法,称为单密钥密码算法。加密密钥与解密密钥不同的密码算法,称为双密钥密码算法。
单密钥密码算法可分为序列密码算法和分组密码算法。对明文按字符(如比特)逐位地加密的密码算法为序列密码算法,对明文进行分组(含有多个字符),逐组地进行加密的密码算法为分组密码算法。
目前分组加密算法都是按照二进制,逐比特地进行加密的。如1977年美国公布推行的美国数据加密标准(DES),1990年中国和欧洲学者共同发表的国际数据加密算法(IDEA),2000年美国推出的用于取代DES的高级加密标准(AES)等。
二进制的分组加密算法,来源于并服务于信息表示与处理的最小单元二进制位(比特位)的计算机及现代数字通信技术。为了信息变换的方便起见,分组密码算法内部都是分为左右(A、B)两部分,以A部分的变换结果来模二加B部分,再用B部分的变换结果模二加A部分,如此循环迭代达到加密保护信息的目的。所以分组长度必须是最小单元的2倍,不满2倍时,填充信息使其达到2倍。最小单元为二进制位既符合计算机处理和数字通信的需要,又以最小填充信息量,达到最高填充效率。
但是一些特殊场合,如10进制数显示的票据数字序列(明文),当其用二进制分组加密算法加密后,加密结果再变换成10进制的数字序列(密文),此时的10进制密文数字序列长度比明文要长。如果通过电话拨号将密文传入验证中心进行验证时,密文长度变长使得拨打电话的时间和操作量增加。例如电话电码防伪,通常用二进制加密算法对明码加密后,其结果(防伪码及密文)比明码(明文)长,消费者拨打电话防伪码查询商品的真伪时,同样增加了时间和操作量。

发明内容
为了解决信息安全技术领域中现有的加密算法技术对10进制数加密后密文比明文长,使用如电话等手段进行密文验证时,增加了密文输入的时间和操作量的问题,本发明提供了一种分组加密与解密算法。该分组加密算法完成对10进制数字序列的加密。当明文10进制数字序列为分组长度时,或分组长度等于明文10进制数字序列长度,加密结果的长度等于分组的长度,采用相应的解密算法对密文进行解密。
为实现上述目的,本密码算法的输入明文和密钥为10进制数,算法内的各个函数以10进制数字为基本运算单元,模运算以模10加、模10减,或模100加、模100减为基本运算,这样的处理使得本算法与已出现的各种分组密码算法不同。
本发明的密码算法包括加密算法和解密算法。加密算法和解密算法的步骤基本相同。
本发明一方面涉及一种分组加密算法,对明文进行加密,生成加密的密文,该分组加密算法包括步骤如下1)对明文P进行分组运算;2)加密循环迭代计算;3)位置变换并输出密文,其中2)加密循环迭代计算又包括a、数字扩展运算;b、密钥与变量的混合运算;c、非线性变换运算;d、信息掩盖运算;e、再赋值运算;f、分组加密算法的密钥一次循环右移运算,明文P为一组10进制数字P1、P2、……、Pi、……、Pm,0≤i≤m,且数字Pi取下列a、b的一种值域,
a、0≤Pi≤9b、0≤Pi≤99密钥K为一组10进制数字K1、K2、……、Ki、……、Km,0≤i≤m,且数字Ki取Pi的值域,算法内的各个函数以10进制数字为基本运算单元,其中b、密钥与变量的混合运算中的模运算为模10加运算或模100加运算,d、信息掩盖运算中的模运算为模10加运算或模100加运算,生成一组加密的10进制密文。
本发明另一方面涉及一种分组解密算法,对密文进行解密,生成解密的明文,该分组解密算法包括步骤如下1)对密文C进行分组运算;2)解密循环迭代计算;3)位置变换并输出明文,其中2)解密循环迭代计算包括a、数字扩展运算;b、密钥与变量的混合运算;c、非线性变换运算;d、信息掩盖运算;e、再赋值运算;f、密钥一次循环左移运算,输入密文C为一组10进制数字C1、C2、……、Ci、……、Cm,0≤i≤m,且数字Ci只能取下列a、b的一种值域,a、0≤Ci≤9b、0≤Ci≤99密钥K为一组10进制数字K1、K2、……、Ki、……、Km,0≤i≤m,且数字Ki取Pi的值域,算法内的各个函数以10进制数字为基本运算单元,其中b、密钥与变量的混合运算中的模运算为模10加运算或模100加运算,d、信息掩盖运算中的模运算为模10减运算或模100减运算,生成一组解密的10进制明文。
有益效果采用本方法在信息安全技术领域中对10进制数加密后密文数字序列长度和明文一样长,使用如电话等手段进行密文验证时,减少了密文确认输入的时间和操作量,并采用相应的解密算法进行解密。


图1是为本发明的加解密算法示意图;图2是为本发明的加密算法数学模型示意图;图3是为本发明的解密算法数学模型示意图。
具体实施例方式
下面结合附图和具体实施例对本发明作进一步说明,但不作为对本发明的限定,本发明的密码算法包括加密算法和解密算法。加密算法和解密算法的结构基本相同。
现有技术中对10进制数显示的票据数字序列(明文)加密都是先将10进制数转换成2进制数,之后用二进制加密算法加密后,加密结果再变换成10进制的数字序列(密文),此时的10进制密文数字序列长度比明文要长,如果通过电话拨号将密文传入验证中心进行验证时,密文长度变长使得拨打电话的时间和操作量增加,如图1所示,而本发明的算法内的各个函数以10进制数字为基本运算单元,模运算直接采用模10加或模100加运算的加密算法,可解决10进制密文数字序列长度比明文要长的问题,解密时相应步骤的模运算采用模10减或模100减运算。
实施例1在信息安全技术领域中,10进制数显示的票据数字序列(明文)这里设为P,对该明文的分组加密算法的具体运算过程如图2所示,包括对明文P进行分组运算、加密循环迭代计算、位置变换与输出密文等,加密循环迭代计算包含6个子运算过程,分别是数字扩展运算、密钥与变量的混合运算、非线性变换运算、信息掩盖运算、再赋值运算和密钥一次循环右移运算,以上运算过程都是现有技术,不同的是在本实施例中明文P为一组10进制数字P1、P2、……、Pi、……、Pm,0≤i≤m,且数字Pi取下列a、b的一种值域,a、0≤Pi≤9b、0≤Pi≤99密钥K为一组10进制数字K1、K2、……、Ki、……、Km,0≤i≤m,且数字Ki取Pi的值域,算法内的各个函数以10进制数字为基本运算单元,子运算密钥与变量的混合运算中的模运算为模10加运算或模100加运算,子运算信息掩盖运算中的模运算为模10加运算或模100加运算。
该加密算法的数学描述具体为1)对明文P进行分组运算将明文P分为两个长度相等的部分前半部分和后半部分,前半部分是P1、P2、……、Pi、……、Ps,后半部分是Ps+1、Ps+2、……、Pj……、Pm,m等于2S;若m不是偶数,则在明文中增加一个Pi或增加一个Pj,使得m成为偶数,S的2倍数。
2)加密循环迭代计算该加密循环迭代计算包含一组运算过程,循环迭代次数可以设定,在一次循环迭代中,其输入是上次循环计算的结果,设第e次循环计算的输入是Xe,密钥是Ke,输出是Ze,它们的分量分别是X1e、X2e、……、Xme,K1e、K2e、……、Kme,Z1e、Z2e、……、Zse,0≤e≤n,首次循环计算的输入X1为明文P,X11、X21、……、Xm1分别等于P1、P2、……、Pm,加密算法首次循环计算的密钥K1为密钥K,K11、K21、……、Ki1、……、Km1分别等于K1、K2、……、Km;加密循环迭代计算包括的运算过程a、数字扩展运算将Xs+1e、Xs+2e、……Xme共S个变量扩展为S对变量,运算规则是设共有S对Xue、Xwe变量,u和w分别取值S+1、S+2、…、m各1次,且要求在一组变量中,Xue≠Xwe;]]>b、密钥与变量的混合运算密钥与Xue和Xwe按下列(1)、(2)式进行的模运算为模10加(或模100加)运算,Gue=Xue⊕Khe---(1)]]>Que=Xwe⊕Kwe---(2)]]>其中若0≤Pi≤9,则“”具体表示按模10加进行运算;0≤Pi≤99,则“”具体表示按模100加运算,h取值1、2、……、S各1次,u、w取值S+1、S+2、……、m各1次;以下各变量的值域同Pi,下标h、u、w的取值要求、“”的计算方法同本子过程,c、非线性变换运算设存在函数fh,该子运算按下列(3)式进行运算,Yue=fh(Gue,Que),---(3)]]>d、信息掩盖运算按下列(4)式进行的模运算为模10加(或模100加)运算,Zhe=Xhe⊕Yue---(4)]]>e、再赋值运算按下列(5)、(6)式进行;Xhe+1=Xue,---(5)]]>
Xue+1=Zhe---(6)]]>f、密钥一次循环右移运算按下列(7)、(8)式进行;Ki+1e+1=Kie,i=1,,······,m-1---(7)]]>K1e+1=Kme---(8)]]>3)位置变换与输出密文循环迭代计算完成后,其结果的前后两部分位置交换后,赋值给密文C,加密计算结束,亦即当循环迭代计算完成n次后,得到m个Xin+1,将这m个Xin+1的前后两部分交换,进行(9)、(10)式运算。
Ch=Xue+1,---(9)]]>Cu=Xhe+1---(10)]]>采用本方法在对10进制数加密后密文数字序列长度和明文一样长,如明文数字序列长度为9,采用本方法加密后的密文数字序列长度也为9,消费者拨打电话防伪码即密文查询商品的真伪时,只需拨打9位10进制数字即可,而采用现有技术则密文数字序列长度为11,采用本方法减少了消费者时间和操作量。
实施例2本实施例是相应实施例1中输出的密文进行解密运算,解密算法的具体运算过程如图3所示,包括对密文C进行分组运算、解密循环迭代计算、位置变换与输出明文等,解密循环迭代计算包含6个子运算过程,分别是数字扩展运算、密钥与变量的混合运算、非线性变换运算、信息掩盖运算、再赋值和密钥一次循环左移运算,以上运算过程都是与实施例1加密算法相对应,解密算法的输入密文C为一组10进制数字C1、C2、……、Ci、……、Cm,0≤i≤m,且数字Ci只能取下列a、b的一种值域,a、0≤Ci≤9b、0≤Ci≤99解密算法的密钥K为一组10进制数字K1、K2、……、Ki、……、Km,0≤i≤m,且数字Ki取Pi的值域,,算法内的各个函数以10进制数字为基本运算单元,子运算b、密钥与变量进行的混合运算中的模运算为模10加运算或模100加运算,子运算d、使用信息掩盖运算中的模运算为模10减运算或模100减运算。
该解密算法的数学描述具体为1)对密文C进行分组运算将密文C分为两个长度相等的部分前半部分和后半部分,前半部分是C1、C2、……、Ci、……、Cs,后半部分是Cs+1、Cs+2、……、Ci、……、Cm,m等于2S;2)解密循环迭代计算该解密循环迭代计算包含一组运算过程,循环迭代次数可以设定,在一次循环迭代中,其输入是上次循环计算的结果,设第e次循环计算的输入是Xe,密钥是Ke,输出是Ze,它们的分量分别是X1e、X2e、……、Xme,K1e、K2e、……、Kme,Z1e、Z2e、……、Zse,0≤e≤n,首次循环计算的输入X1为密文C,X11、X21、……、Xm1分别等于C1、C2、……、Cm,首次循环计算的密钥K1为密钥K的n次循环右移,即K1为加密算法的Kn;解密循环迭代计算包括的运算过程a、数字扩展运算将Xs+1e、Xs+2e、……Xme共S个变量扩展为S对变量,运算规则是设共有S对Xue、Xwe变量,u和w分别取值S+1、S+2、…、m各1次,且要求在一组变量中,Xue≠Xwe;]]>b、密钥与变量的混合运算密钥与Xue和Xwe按下列(11)、(12)式进行的模运算为模10加(或模100加)运算;Gue=Xue⊕Khe---(11)]]>Que=Xwe⊕Kwe---(12)]]>c、非线性变换运算使用加密算法的函数fh,该子运算按下列(13)式进行运算;Yue=fh(Gue,Que),---(13)]]>d、信息掩盖运算该子运算的模运算为模10减或模100减运算,按下列(14)式进行运算, 其中若0≤Ci≤9,则“”具体表示按模10减进行运算;0≤Ci≤99,则“,,具体表示按模100减进行运算;e、再赋值运算该子运算按下列(15)、(16)式进行;Xhe+1=Xue,---(15)]]>Xue+1=Zhe---(16)]]>f、密钥一次循环左移运算该子运算按下列(17)、(18)式进行循环左移;Kie+1=Ki+1e,i=1,,······,m-1---(17)]]>Kme+1=K1e---(18)]]>3)位置变换与输出明文循环迭代计算完成后,其结果的前后两部分位置交换后,赋值给明文P,解密计算结束,亦即当循环迭代计算完成n次后,得到m个Xin+1,将这m个Xin+1的前后两部分交换,进行(19)、(20)运算。
Ph=Xue+1,---(19)]]>Pu=Xhe+1---(20)]]>验证中心的计算机采用本方法对实施例1中消费者输入的防伪码即密文进行解密。
下面是整个加密解密算法的源代码//生成或验证防伪码的常数(开始)const bcs=289342928;//防伪码变换的基码bs1array
of byte=(101,21,93,235,86,206,125,85);const la0array
of byte=((9,3,8,0,5,4,7,2,1,6),(2,6,1,3,8,7,0,5,4,9),(4,8,3,5,0,9,2,7,6,1),(5,9,4,6,1,0,3,8,7,2),(8,2,7,9,4,3,6,1,0,5),(6,0,5,7,2,1,4,9,8,3),(3,7,2,4,9,8,1,6,5,0),(1,5,0,2,7,6,9,4,3,8),(0,4,9,1,6,5,8,3,2,7),(7,1,6,8,3,2,5,0,9,4));la1array
of byte=((2,5,4,3,7,1,8,9,0,6),(3,6,5,4,8,2,9,0,1,7),(4,7,6,5,9,3,0,1,2,8),(9,2,1,0,4,8,5,6,7,3),(1,4,3,2,6,0,7,8,9,5),(8,1,0,9,3,7,4,5,6,2),(5,8,7,6,0,4,1,2,3,9),(0,3,2,1,5,9,6,7,8,4),(6,9,8,7,1,5,2,3,4,0),(7,0,9,8,2,6,3,4,5,1));
la2array
of byte=((8,0,9,4,7,6,3,5,1,2),(1,3,2,7,0,9,6,8,4,5),(5,7,6,1,4,3,0,2,8,9),(3,5,4,9,2,1,8,0,6,7),(9,1,0,5,8,7,4,6,2,3),(4,6,5,0,3,2,9,1,7,8),(7,9,8,3,6,5,2,4,0,1),(2,4,3,8,1,0,7,9,5,6),(6,8,7,2,5,4,1,3,9,0),(0,2,1,6,9,8,5,7,3,4));la3array
of byte=((5,8,2,6,3,4,9,1,0,7),(0,3,7,1,8,9,4,6,5,2),(9,2,6,0,7,8,3,5,4,1),(1,4,8,2,9,0,5,7,6,3),(4,7,1,5,2,3,8,0,9,6),(8,1,5,9,6,7,2,4,3,0),(7,0,4,8,5,6,1,3,2,9),(2,5,9,3,0,1,6,8,7,4),(3,6,0,4,1,2,7,9,8,5),(6,9,3,7,4,5,0,2,1,8));la4array
of byte=((6,2,8,9,5,1,0,3,7,4),(3,9,5,6,2,8,7,0,4,1),(7,3,9,0,6,2,1,4,8,5),(0,6,2,3,9,5,4,7,1,8),(5,1,7,8,4,0,9,2,6,3),(9,5,1,2,8,4,3,6,0,7),(4,0,6,7,3,9,8,1,5,2),
(1,7,3,4,0,6,5,8,2,9),(2,8,4,5,1,7,6,9,3,0),(8,4,0,1,7,3,2,5,9,6));cv1=4;//分组长度的一半,从0开始记cv21=2*cv1+1;//分组长度,从0开始记ksarray
of byte=(0,1,2,3,4,5,6,7,8,9);cvarray
of byte=((7,9),(5,8),(9,5),(6,7),(8,6));lps=6;//varzs,zt,k,kkt,C,Parray
of byte;sssinteger;procedure encrypt;vari,lp,t1,t2,Xu,Xw,Gu,Quinteger;X,Yu,Zh;array
of byte;begin//加密与全码变换for i=0 to cv21 do X[i]=zs[i];//zs保存10进制加密数据for lp=0 to lps dobeginfor i=0 to cv1 do//循环取5个拉丁表begin//取控制向量,查拉丁表t1=cv[i,0];t2=cv[i,1];Xu=X[t1];Xw=X[t2];
//密钥与变量混合Gu=(Xu+k[i])mod 10;//模10加Qu=(Xw+k[i+cv1+1])mod 10;case i of0Yu[i]=la0[Gu,Qu];1Yu[i]=la1[Gu,Qu];2Yu[i]=la2[Gu,Qu];3Yu[i]=la3[Gu,Qu];4Yu[i]=la4[Gu,Qu];end;Zh[i]=(Yu[i]+X[i])mod 10;//模10加end;for i=0 to cv1 do X[i]=X[i+cv1+1];for i=0 to cv1 do X[i+cv1+1]=Zh[i];//左移密钥for i=0 to(cv21-1)do kkt[i+1]=k[i];kkt=k[cv21];for i=0 to(cv21)do k[i]=kkt[i];end;//交换for i=0 to cv1 do C[i]=X[cv1+1+i];for i=0 to cv1 do C[cv1+1+i]=X[i];end;procedure dencrypt;vari,lp,t1,t2,Xu,Xw,Gu,Quinteger;X,Yu,Zharray
of byte;begin//解密
for i=0 to cv21 do X[i]=C[i];//C保存10进制密文for lp=0 to lps dobegin//右移密钥for i=1 to(cv21)do kkt[i-1]=k[i];kkt[cv21]=k
;for i=0 to(cv21)do k[i]=kkt[i];for i=0 to cv1 dobegin//取控制向量,查拉丁表t1=cv[i,0];t2=cv[i,1];Xu=X[t1];Xw=X[t2];Gu=(Xu+k[i])mod 10;//模10加Qu=(Xw+k[i+cv1+1])mod 10;case i of0Yu[i]=la0[Gu,Qu];1Yu[i]=la1[Gu,Qu];2Yu[i]=la2[Gu,Qu];3Yu[i]=la3[Gu,Qu];4Yu[i]=la4[Gu,Qu];end;if X[i]>=Yu[i]then Zh[i]=X[i]-Yu[i]else Zh[i]=10+X[i]-Yu[i];//模10减end;for i=0 to cv1 do X[i]=X[i+cv1+1];for i=0 to cv1 do X[i+cv1+1]=Zh[i];end;for i=0 to cv1 do P[i]=X[cv1+1+i];
for i=0 to cv1 do P[cv1+1+i]=X[i];//P保存10进制解密结果end;上面,已经参照各附图,对本发明的几个典型的实施例进行了详细描述,以便使本发明变得更清楚,而不应认为本发明仅仅限于上述的实施例。本领域的技术人员,通过上述各实施例的启迪,不难对本发明做出各种改进、改变或替换,因而这些改进、改变或替换,不应认为已脱离了本发明的构思,或权利要求书所限定的范围。
权利要求
1.一种分组加密算法,对明文进行加密,生成加密的密文,所述分组加密算法包括步骤如下1)对明文P进行分组运算;2)加密循环迭代计算;3)位置变换与输出密文;所述步骤2)加密循环迭代计算包括a、数字扩展运算;b、密钥与变量的混合运算;c、非线性变换运算;d、信息掩盖运算;e、再赋值运算;f、密钥一次循环右移运算;其特征在于,所述明文P为一组10进制数字P1、P2、……、Pi、……、Pm,0≤i≤m,且数字Pi取下列a、b的一种值域,a、0≤Pi≤9b、0≤Pi≤99密钥K为一组10进制数字K1、K2、……、Ki、……、Km,0≤i≤m,且数字Ki取Pi的值域,算法内的各个函数以10进制数字为基本运算单元;所述密钥与变量的混合运算中的模运算为模10加运算或模100加运算,所述信息掩盖运算中的模运算为模10加运算或模100加运算,生成一组加密的10进制密文。
2.一种分组解密算法,对密文进行解密,生成解密的明文,所述分组解密算法包括步骤如下1)对密文C进行分组运算;2)解密循环迭代计算;3)位置变换与输出明文;所述步骤2)解密循环迭代计算包括a、数字扩展运算;b、密钥与变量的混合运算;c、非线性变换运算;d、信息掩盖运算;e、再赋值运算;f、密钥一次循环左移运算;其特征在于,所述输入密文C为一组10进制数字C1、C2、……、Ci、……、Cm,0≤i≤m,且数字Ci只能取下列a、b的一种值域,a、0≤Ci≤9b、0≤Ci≤99密钥K为一组10进制数字K1、K2、……、Ki、……、Km,0≤i≤m,且数字Ki取Pi的值域,算法内的各个函数以10进制数字为基本运算单元,所述密钥与变量的混合运算中的模运算为模10加运算或模100加运算,所述信息掩盖运算中的模运算为模10减运算或模100减运算,生成一组解密的10进制明文。
全文摘要
本发明涉及一种分组加密、解密算法,采用现有技术加密时,10进制密文数字序列长度比明文要长,一些特殊场合,如消费拨打电话防伪码查询商品的真伪时输入密文的操作量较大,本发明提供的算法中明文、密文和密钥为10进制数,算法内的各个函数以10进制数字为基本运算单元,通过加密时采用模10加,解密时采用模10减的方法,这样得到的10进制密文数字序列长度和明文一样长,使用如电话等手段进行密文验证时,减少了密文输入的时间和操作量的问题。
文档编号H04L9/18GK1878059SQ20061009023
公开日2006年12月13日 申请日期2006年7月7日 优先权日2006年7月7日
发明者叶季青 申请人:北京财富投资有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1