本发明属于哈希算法运用技术领域,尤其涉及一种基于混沌系统的单向加密方法。
背景技术:
在现有的加密技术中,哈希函数在数字签名和认证领域尤为重要,因此也有很多人对相关的算法进入了深入研究,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值,这样得到密文长度不一样,同时也加大了攻击者的破解难度,给用户多一种选择加密方式。
本发明的单向加密方法类似哈希函数,能够将任意长度的输入进行处理,最后都可以输出一个固定长度的值,由于混沌系统的特性,同时使得该算法具有了明文可以加密成密文,但密文不能解密出明文的单向性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。