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

文档序号:12375528阅读:348来源:国知局

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



背景技术:

在现有的加密技术中,哈希函数在数字签名和认证领域尤为重要,因此也有很多人对相关的算法进入了深入研究,2004年在国美加州圣巴巴拉召开的国际密码学会议上,来自中国的云教授破译了MD5、HAVAL-128、RIPEMD算法后,又有许多密码学专家在MD5领域做出了更多研究成果,因此MD5算法的安全性,受到越来越多的挑战。混沌源于非线性动力系统,而非线性动力系统描述的是任意随时间变化的过程,这个过程是不确定性的、类似随机、非周期,并对初始值非常敏感,这些特征使得人们难以进行预测该系统的下一个过程,因此,基于混沌系统作为加密算法,拥有先天的优势。

综上所述,现有的加密方法出现的时间长,现有的加密算法安全性较低,而且由于现有算法的特性,使得该算法只能运用到某一领域,不能满足使用者根据自己的实际需求,确定密文的长度;不能加大攻击者的破解难度,并且不能给用户多一种选择加密方式。



技术实现要素:

本发明的目的在于提供一种基于混沌系统的单向加密方法,解决现有的加密方法出现的时间长,现有的加密算法安全性较低,而且由于现有算法的特性,使得该算法只能运用到某一领域,不能满足使用者根据自己的实际需求,确定密文的长度;不能加大攻击者的破解难度,并且不能给用户多一种选择加密方式的问题。

本发明是这样实现的,一种基于混沌系统的单向加密方法,包括以下步骤:

第一步,随机输入一个任意长度的字符串str;

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

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

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

第五步,每个二进制组按BCD编码的方式进行转换成一个数ai,然后将所有ai相加得到一个值C,C=a1+a2+...+an;再将所有数ai拼接成一个大数M,M=a1*100+a2*101+a3*102+...+an*10n-1;其中,

第六步,判断C是否大于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次,每次迭代的结果记为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];len_str表示用户随机输入的任意长度字符串转换的二进制编码的长度值;y表示ai的个数,M表示由ai组合成的一个数,M=a1*100+a2*101+a3*102+...+ay*10y-1

进一步,所述Logistic混沌方程中Xn的初始值为X0,且X0在[0,1]内;u是混沌方程中的u值,u在[0,4]内;当u<3.57时,Logistic方程出现准周期性变化,当u>3.57后,Logistic出现混沌状态。

进一步,ai的生成方法:将输入字符转换的二进制,判断该二进制长度len_str是否为3的倍数,即len_str%3=0;若是则划分为len_str/3个长度为3bit的二进制组,然后在每个二进制组前填充一个0;如果不是3的倍数,则在前面添加len_str%3个0在二进制字符串头部,然后划分为个长度为3bit的二进制组,然后在每个二进制组前填充一个0,最后每个组按BCD码的方式进行转换成一个数ai

M的生成方法:将所有数ai拼接成一个大数M,拼接方法为:M=a1*100+a2*101+a3*102+...+an*10n-1

X0的生成方法:M是一个长度为y的正整数,利用M生成一个[0,1]范围内的X0,公式表示为:X0=M/10y

u的生成方法:u为大于3.57的数使Logistic混沌方程进入混沌状态,利用X0进行除以10,使之进入[0,0.1)内,再用4减去该除数即得到u];公式表示为:u=4-X0/10,u取小数点后位;

C值的生成方法为:先计算C值:C=a1+a2+...+an。C是混沌方程初始迭代的次数,目的是为了让X0进入混沌状态,所以C过大会影响整个加密的效率。这里设置一个数K,由于应用场景的不同,K的取值也不同,本发明中设置数K的目的是控制C在有效范围内(有效范围指:至少能使K0进入混沌状态的最小迭代次数)。

控制C的取值方法为:用for循环判断C是否小于某个固定值K,即若C小于K,则退出循环,否则进行C=[C/2],再循环判断。

本发明利用输入信息的二进制按照某种方法产生几个固定的数值,然后把该数值运用到混沌系统中,最后对混沌计算生成的值进行处理,生成一个固定长度的字符串,这样就达到了加密的效果。

在本发明中,由于算法中K和N的取值是使用者自己定义的,所以生成的密文长度也是不一样的,在不同的领域中,使用者可以根据自己的实际需求,确定算法中的K和N值,这样得到密文长度不一样,同时也加大了攻击者的破解难度,给用户多一种选择加密方式。

本发明的单向加密方法类似哈希函数,能够将任意长度的输入进行处理,最后都可以输出一个固定长度的值,由于混沌系统的特性,同时使得该算法具有了明文可以加密成密文,但密文不能解密出明文的单向性。

附图说明

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

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

下面结合附图对本发明的应用原理作详细描述。

如图1所示,本发明实施例提供的基于混沌系统的单向加密方法的具体步骤如下:

第1步:随机输入一个任意长度的字符串str。

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

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

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

第5步:每个二进制组按BCD编码的方式进行转换成一个数ai,然后将所有ai相加得到一个值C,即C=a1+a2+...+an。再将所有数ai拼接成一个大数M,即M=a1*100+a2*101+a3*102+...+an*10n-1

第6步:判断C是否大于K,如果大于则C=[C/2],再重复此步骤,若C小于K,进行下一步。

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

第8步:带入公式Xn+1=uXn(1-Xn),进行循环计算C次,得到值Xc

第9步:以Xc为初始值,再带入Logistic混沌方程迭代4*N次,每次迭代的结果记为Xi;Xi>=0.5,则记1;Xi<0.5,则记0,总共就有4*N个0或1。

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

本发明采用了Logistic混沌方程,即Xn+1=uXn(1-Xn)。该加密方法的核心是Logistic混沌方程以及生产方程中ai、X0、u、与初始值C的方法。

为了更好的对加密方法进行描述,结合本加密机制的特点,本发明采用以下一般性定义:

len_str表示用户随机输入的任意长度字符串转换的二进制编码的长度值。

ai表示某四个二进制按照BCD码转换成一个数。

y表示ai的个数,即

M表示由ai(i∈[1,y])组合成的一个数,即M=a1*100+a2*101+a3*102+...+ay*10y-1

C表示所有ai加起来的和,即C=∑ai,i∈[1,y]。

X0是混沌算法中Xn的初始值;u是混沌方程中的u值。

下面结合Logistic混沌方程、X0的生成、u的生成、C的生成对本发明的应用原理作进一步描述。

本发明实施例提供的的单向加密方法包括:

1、Logistic混沌方程,即Xn+1=uXn(1-Xn)

该方程中Xn的初始值为X0,且X0必须在[0,1]范围内。u在[0,4]内,当u<3.57时,Logistic方程会出现准周期性变化,但当u>3.57后,Logistic将出现混沌状态。

2、X0的生成

由于M是一个y位的正整数,因此需要将M转换成一个[0,1]范围内的X0,即X0=M/10y

3、u的生成

由于u的特殊性,u必须大于3.57才能使方程进入混沌状态,所以对X0进行除10,使之进入[0,0.1)内,再用4减去该数即得到u,此时u属于(3.9,4]内,满足条件,算法为:u=4-X0/10,u取小数点后位,目的是为了避免小数点后数值太长,不方便计算,于是采用该方法动态的取前几位小数。

4、C的生成

C值是为了让该方程计算C次进入混沌状态,确保别人不能猜到该算法的u值和X0值,所以C值也不宜过大,先计算C值:C=a1+a2+...+an,然后用for循环判断C是否小于某个固定值K,即若C小于K,则退出循环,否则进行C=[C/2],再循环判断。

本发明利用输入信息的二进制按照某种方法产生几个固定的数值,然后把该数值运用到混沌系统中,最后对混沌计算生成的值进行处理,生成一个固定长度的字符串,这样就达到了加密的效果。

在本发明中,由于算法中K和N的取值是使用者自己定义的,所以生成的密文长度也是不一样的,在不同的领域中,使用者可以根据自己的实际需求,确定算法中的K和N值,这样得到密文长度不一样,同时也加大了攻击者的破解难度,给用户多一种选择加密方式。

本发明的单向加密方法类似哈希函数,能够将任意长度的输入进行处理,最后都可以输出一个固定长度的值,由于混沌系统的特性,同时使得该算法具有了明文可以加密成密文,但密文不能解密出明文的单向性。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1