一种基于混沌系统的单向加密方法转让专利

申请号 : CN201611019140.9

文献号 : CN106301766B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李飞刘勇覃周高路路徐翔

申请人 : 成都信息工程大学

摘要 :

本发明公开了一种基于混沌系统的单向加密方法,用户随机输入的任意长度字符串转换的二进制编码的长度值利用Logistic混沌方程Xn+1=uXn(1‑Xn),产生Logistic混沌方程的X0、u、与初始值C固定数值;然后把X0、u、与初始值C固定数值运用到Logistic混沌方程中;最后对混沌计算生成的值C、M、y值进行处理,生成一个固定长度的字符串。本发明的单向加密方法类似哈希函数,能够将任意长度的输入进行处理,最后都可以输出一个固定长度的值,由于混沌系统的特性,同时使得该算法具有了明文可以加密成密文,但密文不能解密出明文的单向性。

权利要求 :

1.一种基于混沌系统的单向加密方法,其特征在于,该基于混沌系统的单向加密方法包括以下步骤:第一步,随机输入一个任意长度的字符串str;

第二步,将该字符串按照某种编码方式转换成二进制码,并计算出该二进制长度len_str;

第三步,判断该长度len_str是否为3的倍数,即len_str%3=0;如果不是3的倍数,则进行第四步;若是则划分为y个长度为3bit的二进制组,其中y=len_str/3;然后在每个二进制组前填充一个0,跳转到第5步;

第四步,如果不是3的倍数,则在前面添加len_str%3个0在二进制字符串前面,划分为y个长度为3bit的二进制,其中 然后在每个二进制组前填充一个0,再进行第五步;

第五步,每个二进制组按BCD编码的方式进行转换成一个数ai,然后将所有ai相加得到一个值C,C=a1+a2+...+ay,其中i∈[1,y],再将所有数ai组合成一个大数M,M=a1*100+a2*

101+a3*102+...+ay*10n-1;

第六步,判断C是否大于K,如果大于K,则C=[C/2],再重复此步骤,若C小于K,进行第七步;

第七步,计算 X0=M/10y;u=4-X0/10,u取小数点后 位;

第八步,带入Logistic混沌方程公式Xn+1=uXn(1-Xn),进行循环计算C次,得到值Xc;

第九步,以Xc为初始值,再带入Logistic混沌方程迭代4*N次,其中N为自定义输出的密文字符串长度,每次迭代的结果记为Xi;Xi>=0.5,则记1;Xi<0.5,则记0,共有4*N个0或1;

第十步,再以四个0或1的二进制为一组,转换成一个16进制的字符,最后拼接成一个固定长度为N的字符串,该字符串为最后的密文;

其中,ai表示某四个二进制按照BCD码转换成一个数;C表示经过第六步处理后的结果值,即求所有ai加起来的和,即C=∑ai,i∈[1,y],再判断C是否大于K,如果大于K,则C=[C/

2],再重复此步骤,最后得到一个满足条件的C,再将此C值带入方程;len_str表示用户随机输入的任意长度字符串转换的二进制编码的长度值;y表示ai的个数, M表示由ai组合成的一个数,M=a1*100+a2*101+a3*102+...+ay*10y-1。

2.如权利要求1所述的基于混沌系统的单向加密方法,其特征在于,所述Logistic混沌方程中Xn的初始值为X0,且X0在[0,1]内;u是混沌方程中的u值,u在[0,4]内;当u<3.57时,Logistic方程出现准周期性变化,当u>3.57后,Logistic出现混沌状态。

3.如权利要求1所述的基于混沌系统的单向加密方法,其特征在于,所述C是让X0进入混沌状态混沌方程初始迭代的次数;C过大影响整个加密的效率,通过设置数K控制C为至少能使K0进入混沌状态的最小迭代次数。

说明书 :

一种基于混沌系统的单向加密方法

技术领域

[0001] 本发明属于哈希算法运用技术领域,尤其涉及一种基于混沌系统的单向加密方法。

背景技术

[0002] 在现有的加密技术中,哈希函数在数字签名和认证领域尤为重要,因此也有很多人对相关的算法进入了深入研究,2004年在国美加州圣巴巴拉召开的国际密码学会议上,来自中国的云教授破译了MD5、HAVAL-128、RIPEMD算法后,又有许多密码学专家在MD5领域做出了更多研究成果,因此MD5算法的安全性,受到越来越多的挑战。混沌源于非线性动力系统,而非线性动力系统描述的是任意随时间变化的过程,这个过程是不确定性的、类似随机、非周期,并对初始值非常敏感,这些特征使得人们难以进行预测该系统的下一个过程,因此,基于混沌系统作为加密算法,拥有先天的优势。
[0003] 综上所述,现有的加密方法出现的时间长,现有的加密算法安全性较低,而且由于现有算法的特性,使得该算法只能运用到某一领域,不能满足使用者根据自己的实际需求,确定密文的长度;不能加大攻击者的破解难度,并且不能给用户多一种选择加密方式。

发明内容

[0004] 本发明的目的在于提供一种基于混沌系统的单向加密方法,解决现有的加密方法出现的时间长,现有的加密算法安全性较低,而且由于现有算法的特性,使得该算法只能运用到某一领域,不能满足使用者根据自己的实际需求,确定密文的长度;不能加大攻击者的破解难度,并且不能给用户多一种选择加密方式的问题。
[0005] 本发明是这样实现的,一种基于混沌系统的单向加密方法,包括以下步骤:
[0006] 第一步,随机输入一个任意长度的字符串str;
[0007] 第二步,将该字符串按照某种编码方式转换成二进制码,并计算出该二进制长度len_str;
[0008] 第三步,判断该长度len_str是否为3的倍数,即len_str%3=0;如果不是3的倍数,则进行第四步;若是则划分为len_str/3个长度为3bit的二进制组;然后在每个二进制组前填充一个0,跳转到第5步。
[0009] 第四步,如果不是3的倍数,则在前面添加len_str%3个0在二进制字符串前面,划分为 个长度为3bit的二进制,然后在每个二进制组前填充一个0,再进行第五步;
[0010] 第五步,每个二进制组按BCD编码的方式进行转换成一个数ai,然后将所有ai相加得到一个值C,C=a1+a2+...+an;再将所有数ai拼接成一个大数M,M=a1*100+a2*101+a3*102n-1+...+an*10 ;其中,
[0011] 第六步,判断C是否大于K,如果大于则C=[C/2],再重复此步骤,若C小于K,进行第七步;
[0012] 第七步,计算 X0=M/10y;u=4-X0/10,u取小数点后位;
[0013] 第八步,带入Logistic混沌方程公式Xn+1=uXn(1-Xn),进行循环计算C次,得到值Xc;
[0014] 第九步,以Xc为初始值,再带入Logistic混沌方程迭代4*N次,每次迭代的结果记为Xi;Xi>=0.5,则记1;Xi<0.5,则记0,共有4*N个0或1;
[0015] 第十步,再以四个0或1的二进制为一组,转换成一个16进制的字符,最后拼接成一个固定长度为N的字符串,该字符串为最后的密文;
[0016] 其中,ai表示某四个二进制按照BCD码转换成一个数;C表示所有ai加起来的和,即C=∑ai,i∈[1,y];len_str表示用户随机输入的任意长度字符串转换的二进制编码的长度值;y表示ai的个数, M表示由ai组合成的一个数,M=a1*100+a2*101+a3*102+...+ay*10y-1。
[0017] 进一步,所述Logistic混沌方程中Xn的初始值为X0,且X0在[0,1]内;u是混沌方程中的u值,u在[0,4]内;当u<3.57时,Logistic方程出现准周期性变化,当u>3.57后,Logistic出现混沌状态。
[0018] 进一步,ai的生成方法:将输入字符转换的二进制,判断该二进制长度len_str是否为3的倍数,即len_str%3=0;若是则划分为len_str/3个长度为3bit的二进制组,然后在每个二进制组前填充一个0;如果不是3的倍数,则在前面添加len_str%3个0在二进制字符串头部,然后划分为 个长度为3bit的二进制组,然后在每个二进制组前填充一个0,最后每个组按BCD码的方式进行转换成一个数ai;
[0019] M的生成方法:将所有数ai拼接成一个大数M,拼接方法为:M=a1*100+a2*101+a3*102+...+an*10n-1;
[0020] X0的生成方法:M是一个长度为y的正整数,利用M生成一个[0,1]范围内的X0,公式表示为:X0=M/10y;
[0021] u的生成方法:u为大于3.57的数使Logistic混沌方程进入混沌状态,利用X0进行除以10,使之进入[0,0.1)内,再用4减去该除数即得到u];公式表示为:u=4-X0/10,u取小数点后 位;
[0022] C值的生成方法为:先计算C值:C=a1+a2+...+an。C是混沌方程初始迭代的次数,目的是为了让X0进入混沌状态,所以C过大会影响整个加密的效率。这里设置一个数K,由于应用场景的不同,K的取值也不同,本发明中设置数K的目的是控制C在有效范围内(有效范围指:至少能使K0进入混沌状态的最小迭代次数)。
[0023] 控制C的取值方法为:用for循环判断C是否小于某个固定值K,即若C小于K,则退出循环,否则进行C=[C/2],再循环判断。
[0024] 本发明利用输入信息的二进制按照某种方法产生几个固定的数值,然后把该数值运用到混沌系统中,最后对混沌计算生成的值进行处理,生成一个固定长度的字符串,这样就达到了加密的效果。
[0025] 在本发明中,由于算法中K和N的取值是使用者自己定义的,所以生成的密文长度也是不一样的,在不同的领域中,使用者可以根据自己的实际需求,确定算法中的K和N值,这样得到密文长度不一样,同时也加大了攻击者的破解难度,给用户多一种选择加密方式。
[0026] 本发明的单向加密方法类似哈希函数,能够将任意长度的输入进行处理,最后都可以输出一个固定长度的值,由于混沌系统的特性,同时使得该算法具有了明文可以加密成密文,但密文不能解密出明文的单向性。

附图说明

[0027] 图1是本发明实施例提供的基于混沌系统的单向加密方法流程图。

具体实施方式

[0028] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0029] 下面结合附图对本发明的应用原理作详细描述。
[0030] 如图1所示,本发明实施例提供的基于混沌系统的单向加密方法的具体步骤如下:
[0031] 第1步:随机输入一个任意长度的字符串str。
[0032] 第2步:将该字符串按照某种编码方式转换成二进制码,并计算出该二进制长度len_str。
[0033] 第3步:判断该长度len_str是否为3的倍数,即len_str%3=0。如果不是3的倍数,则进行第4步,若是则划分为len_str/3个长度为3bit的二进制组,然后在每个二进制组前填充一个0。跳转到第5步。
[0034] 第4步:如果不是3的倍数,则在前面添加len_str%3个0在二进制字符串前面,划分为 个长度为3bit的二进制,然后在每个二进制组前填充一个0,再进行下一步。
[0035] 第5步:每个二进制组按BCD编码的方式进行转换成一个数ai,然后将所有ai相加得到一个值C,即C=a1+a2+...+an。再将所有数ai拼接成一个大数M,即M=a1*100+a2*101+a3*102+...+an*10n-1。
[0036] 第6步:判断C是否大于K,如果大于则C=[C/2],再重复此步骤,若C小于K,进行下一步。
[0037] 第7步:计算 X0=M/10y;u=4-X0/10,u取小数点后位。
[0038] 第8步:带入公式Xn+1=uXn(1-Xn),进行循环计算C次,得到值Xc。
[0039] 第9步:以Xc为初始值,再带入Logistic混沌方程迭代4*N次,每次迭代的结果记为Xi;Xi>=0.5,则记1;Xi<0.5,则记0,总共就有4*N个0或1。
[0040] 第10步:再以四个0或1的二进制为一组,转换成一个16进制的字符,最后拼接成一个固定长度为N的字符串,该字符串即为最后的密文。
[0041] 本发明采用了Logistic混沌方程,即Xn+1=uXn(1-Xn)。该加密方法的核心是Logistic混沌方程以及生产方程中ai、X0、u、与初始值C的方法。
[0042] 为了更好的对加密方法进行描述,结合本加密机制的特点,本发明采用以下一般性定义:
[0043] len_str表示用户随机输入的任意长度字符串转换的二进制编码的长度值。
[0044] ai表示某四个二进制按照BCD码转换成一个数。
[0045] y表示ai的个数,即
[0046] M表示由ai(i∈[1,y])组合成的一个数,即M=a1*100+a2*101+a3*102+...+ay*10y-1。
[0047] C表示所有ai加起来的和,即C=∑ai,i∈[1,y]。
[0048] X0是混沌算法中Xn的初始值;u是混沌方程中的u值。
[0049] 下面结合Logistic混沌方程、X0的生成、u的生成、C的生成对本发明的应用原理作进一步描述。
[0050] 本发明实施例提供的的单向加密方法包括:
[0051] 1、Logistic混沌方程,即Xn+1=uXn(1-Xn)
[0052] 该方程中Xn的初始值为X0,且X0必须在[0,1]范围内。u在[0,4]内,当u<3.57时,Logistic方程会出现准周期性变化,但当u>3.57后,Logistic将出现混沌状态。
[0053] 2、X0的生成
[0054] 由于M是一个y位的正整数,因此需要将M转换成一个[0,1]范围内的X0,即X0=M/y10。
[0055] 3、u的生成
[0056] 由于u的特殊性,u必须大于3.57才能使方程进入混沌状态,所以对X0进行除10,使之进入[0,0.1)内,再用4减去该数即得到u,此时u属于(3.9,4]内,满足条件,算法为:u=4-X0/10,u取小数点后 位,目的是为了避免小数点后数值太长,不方便计算,于是采用该方法动态的取前几位小数。
[0057] 4、C的生成
[0058] C值是为了让该方程计算C次进入混沌状态,确保别人不能猜到该算法的u值和X0值,所以C值也不宜过大,先计算C值:C=a1+a2+...+an,然后用for循环判断C是否小于某个固定值K,即若C小于K,则退出循环,否则进行C=[C/2],再循环判断。
[0059] 本发明利用输入信息的二进制按照某种方法产生几个固定的数值,然后把该数值运用到混沌系统中,最后对混沌计算生成的值进行处理,生成一个固定长度的字符串,这样就达到了加密的效果。
[0060] 在本发明中,由于算法中K和N的取值是使用者自己定义的,所以生成的密文长度也是不一样的,在不同的领域中,使用者可以根据自己的实际需求,确定算法中的K和N值,这样得到密文长度不一样,同时也加大了攻击者的破解难度,给用户多一种选择加密方式。
[0061] 本发明的单向加密方法类似哈希函数,能够将任意长度的输入进行处理,最后都可以输出一个固定长度的值,由于混沌系统的特性,同时使得该算法具有了明文可以加密成密文,但密文不能解密出明文的单向性。
[0062] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。