一种字符串的加密和解密方法与流程

文档序号:18133603发布日期:2019-07-10 10:26阅读:339来源:国知局
一种字符串的加密和解密方法与流程

本发明涉及信息安全技术领域,特别涉及一种字符串的加密和解密方法。



背景技术:

随着internet技术与多媒体技术的飞速发展,数据通信逐渐成为人们进行信息交流的重要手段。由internet网传输数据方便快捷,不受地域限制,但由于某些数据的特殊性,即发送双方都不希望网络上所传输的数据被未授权者所浏览或处理。这些信息不但涉及个人隐私,有的涉及到国家安全,而且与国家的政治、军事和外交等也有重大的关系,因而数据的安全与保密显得越来越重要。在这些要求数据保密的特殊领域或者当数据所有者需要保护自身的利益时,就需要可靠的数据加密技术。

传统的字符串加密通常采用des、ras加密方法进行,加密运算相对比较复杂,随着网络通讯技术的发展,对于字符串加密的安全性、便捷性需求逐渐增加,采用一种安全可靠的密码技术进行字符数据加密已经迫在眉睫。混沌密码技术是一种利用混沌信号对所需对象进行加密的新技术。混沌系统对初始条件和结构参数具有敏感依赖性,可以提供数量众多的非相关、类随机而又确定可再生的混沌序列。由于混沌加密具有连续宽带谱、冲激式的尖锐自相关特性,混沌在数字信息加密和保密通信等领域中所具有的巨大应用前景已引起了人们广泛的研究兴趣。混沌在密码学领域的研究起源于80年代末期,由英国数学家matthews首先提出一种基于变形logistic映射作为序列密码方案。自从matthews的混沌密码提出以来,混沌加密开始受到了来自不同领域研究者的关注。



技术实现要素:

发明目的:本发明的目的是为了解决现有技术中的不足,提供一种字符串的加密和解密方法,利用混沌系统所产生混沌序列排序前、后的位置变化规则,将某段字符串转化成数值序列并进行置乱以生成密文,从而保证了字符串加密与解密的安全性和可行性。

技术方案:本发明所述的一种字符串的加密方法,包括如下几个步骤:

(1)转码:将某段字符串逐个字符转换为数值型数据,得到高位数值序列p1={p11,p21,...,pi1,....,pl1}和低位数值序列p2={p12,p22,...,pi2,....,pl2},其中数值序列p1、p2的长度与该段字符串的长度一致,记为l;

(2)产生混沌序列:

首先利用外部加密密钥(α、β),按照如下所示公式分别计算得到混沌系统的初值x1、参数μ、初始迭代步数m和抽取间隔n1、n2,

x1=mod(kp1+α,0.99999)+0.00001,

μ=β+mod(kp1,4-β),

其中,α∈(0,1),β∈[3.75,4),从而保证x1∈(0,1),μ∈[3.75,4),m∈[419,479]的整数,n1∈[1,23]的整数,n2∈[1,29]的整数,可见混沌系统的初值x1、参数μ、初始迭代步数m和抽取间隔n1、n2不仅与外部密钥α、β有关,而且会随着待加密的该段字符串变化;

然后由初值x1和参数μ,对如下公式所示的logistic混沌系统进行迭代,k表示迭代次数(k=1,2,...),xk+1表示第k次迭代得到的混沌信号,

xk+1=μ×xk×(1-xk)

得到混沌序列x,从第m个元素开始每隔n1个元素取1个,从而形成长度为l的混沌序列y,并从第m个元素开始每隔n2个元素取1个,从而形成长度为l的混沌序列z;

(3)高位、低位数值序列置乱:

将混沌序列y按升序排序,根据序列y排序前、后的位置变化置乱规则,对高位数值序列p1={p11,p21,...,pi1,....,pl1}进行置乱,得到置乱后的高位数值序列同时将混沌序列z按升序排序,根据序列z排序前、后的位置变化置乱规则,对低位数值序列p2={p12,p22,...,pi2,....,pl2}进行置乱,得到置乱后的低位数值序列

(4)转码:将置乱后的高位数值序列和置乱后的低位数值序列进行数值与字符的转换,得到字符串密文c,即为该段字符串的加密密文,其中字符串密文c的长度为

进一步的,步骤(1)中所述的将某段字符串逐个字符转换为数值型数据,其中某段字符串包括,除空格以外的可显示ascii码字符,以及gb2312字符集中双字节编码的6763个汉字;逐个字符转换为数值型数据,是指采用unicode2native(·)函数,将单个汉字转换为区位码数值数据,表示为[区数值数据,位数值数据],或将可显示ascii码字符转换为ascii码数值数据,表示为[0,ascii码数值数据],都可以用数据[pi1,pi2]表示,相应的数据组合得到高位数值序列p1={p11,p21,...,pi1,....,pl1}和低位数值序列p2={p12,p22,...,pi2,....,pl2}。

进一步的,步骤(4)中所述的将置乱后的高位数值序列和置乱后的低位数值序列进行数值与字符的转换,其转换关系表述如下:

设定一个空字符序列c,将置乱后的高位数值序列和置乱后的低位数值序列中各对应元素依次进行如下运算,

如果

首先判断,如果那么将对应低位数值数据加128,即

然后判断,如果那么在字符序列c中添加1个空格,即c=[c,”],并设

接着利用native2unicode(·)函数将数值数据转换为单个汉字,并添加到字符序列c中,即

如果

首先判断,如果那么将对应低位数值数据减128,即

然后利用char(·)函数将数值数据转换为单个ascii码字符,并添加到字符序列c中,即

本发明还公开了一种字符串的解密方法,包括如下几个步骤:

(1)转码:将某段待解密字符串密文逐个字符转换成数值型数据,得到高位数值序列和低位数值序列其中数值序列r1、r2的长度为某段待解密字符串密文的长度为

(2)产生混沌序列:

首先利用外部解密密钥按照如下所示公式分别计算得到混沌系统的初值参数初始迭代步数和抽取间隔

其中,从而保证的整数,的整数,的整数,可见混沌系统的初值参数初始迭代步数和抽取间隔不仅与外部密钥有关,而且会随着待解密字符串密文变化;

然后由初值和参数对如下公式所示的logistic混沌系统进行迭代,k表示迭代次数(k=1,2,...),表示第k次迭代得到的混沌信号,

得到混沌序列从第个元素开始每隔个元素取1个,从而形成长度为的混沌序列并从第个元素开始每隔个元素取1个,从而形成长度为的混沌序列

(3)高位、低位数值序列反置乱:

将混沌序列按升序排序,根据序列排序前、后的位置变化置乱规则,对高位数值序列进行反置乱,得到反置乱后的高位数值序列同时将混沌序列按升序排序,根据序列排序前、后的位置变化置乱规则,对低位数值序列进行反置乱,得到反置乱后的低位数值序列

(4)转码:将反置乱后的高位数值序列和反置乱后的低位数值序列进行数值与字符的转换,得到字符序列pp,即为该段密文解密后恢复的字符串,其中字符序列pp的长度为

进一步的,步骤(1)中所述的将某段待解密字符串密文逐个字符转换成数值型数据,得到高位数值序列和低位数值序列其转换关系表述如下:

首先将某段待解密字符串密文中逐个字符转换为数值数据,即采用unicode2native(·)函数,将单个汉字转换为区位码数值数据,表示为[区数值数据,位数值数据],或将可显示ascii码字符转换为ascii码数值数据,表示为[0,ascii码数值数据],都可用数据[ri1,ri2]表示;

然后将各个数值型数据[ri1,ri2]对应组合得到高位数值序列和低位数值序列

接着逐个检查低位数值序列r2中是否有ri2=32的元素,如果是,则将对应高位数值序列r1中后一元素ri+11数值加1,并删除该数值为32的元素ri2和对应高位数值序列r1中的元素ri1;

最后得到高位数值序列和低位数值序列

进一步的,步骤(4)中所述的将反置乱后的高位数值序列和反置乱后的低位数值序列进行数值与字符的转换,其转换关系表述如下:

设定一个空字符序列pp,将反置乱后的高位数值序列和反置乱后的低位数值序列中对应元素依次进行如下运算,

如果

首先判断,如果那么将对应低位数值数据加128,即

然后判断,如果那么在字符序列pp中添加1个空格,即pp=[pp,”];否则利用native2unicode(·)函数将数值数据转换为单个汉字,并添加到字符序列pp中,即

如果

首先判断,如果那么将对应低位数值数据减128,即

然后利用char(·)函数将数值数据转换为单个ascii码字符,并添加到字符序列pp中,即

有益效果:本发明根据外部加密密钥以及与待加密字符串相关的混沌系统初值、参数、初始迭代步数和抽取间隔等数据,利用混沌系统所产生混沌序列排序前、后的位置变化规则,将某段字符串转化成数值序列并进行置乱以生成密文,从而保证了字符串加密与解密的安全性和可行性。

附图说明

图1为本发明的一种字符串的加密、解密流程示意图。

具体实施方式

如图1所示的一种字符串的加密方法,包括如下几个步骤:

(1)转码:将某段字符串逐个字符转换为数值型数据,其中字符串包括,除空格以外的可显示ascii码字符,以及gb2312字符集中双字节编码的6763个汉字;逐个字符转换为数值型数据,是指采用unicode2native(·)函数,将单个汉字转换为区位码数值数据,表示为[区数值数据,位数值数据],或将可显示ascii码字符转换为ascii码数值数据,表示为[0,ascii码数值数据],都可以用数据[pi1,pi2]表示,相应的数据组合得到高位数值序列p1={p11,p21,...,pi1,....,pl1}和低位数值序列p2={p12,p22,...,pi2,....,pl2},数值序列p1、p2的长度与该段字符串的长度一致,记为l,

(2)产生混沌序列:

首先利用外部加密密钥(α、β),按照如下所示公式分别计算得到混沌系统的初值(x1)、参数(μ)、初始迭代步数(m)和抽取间隔(n1、n2),

x1=mod(kp1+α,0.99999)+0.00001,

μ=β+mod(kp1,4-β),

其中,α∈(0,1),β∈[3.75,4),从而保证x1∈(0,1),μ∈[3.75,4),m∈[419,479]的整数,n1∈[1,23]的整数,n2∈[1,29]的整数,可见混沌系统的初值(x1)、参数(μ)、初始迭代步数(m)和抽取间隔(n1、n2)不仅与外部密钥α、β有关,而且会随着待加密的该段字符串变化;

然后由初值x1和参数μ,对如下公式所示的logistic混沌系统进行迭代,k表示迭代次数(k=1,2,...),xk+1表示第k次迭代得到的混沌信号,

xk+1=μ×xk×(1-xk)

得到混沌序列x,从第m个元素开始每隔n1个元素取1个,从而形成长度为l的混沌序列y,并从第m个元素开始每隔n2个元素取1个,从而形成长度为l的混沌序列z;

(3)高位、低位数值序列置乱:

将混沌序列y按升序排序,根据序列y排序前、后的位置变化置乱规则,对高位数值序列p1={p11,p21,...,pi1,....,pl1}进行置乱,得到置乱后的高位数值序列同时将混沌序列z按升序排序,根据序列z排序前、后的位置变化置乱规则,对低位数值序列p2={p12,p22,...,pi2,....,pl2}进行置乱,得到置乱后的低位数值序列

(4)转码:设定一个空字符序列c,将置乱后的高位数值序列和置乱后的低位数值序列中各对应元素依次进行数值与字符的转换,具体转换关系表述如下,

如果

首先判断,如果那么将对应低位数值数据加128,即

然后判断,如果那么在字符序列c中添加1个空格,即c=[c,”],并设

接着利用native2unicode(·)函数将数值数据转换为单个汉字,并添加到字符序列c中,即

如果

首先判断,如果那么将对应低位数值数据减128,即

然后利用char(·)函数将数值数据转换为单个ascii码字符,并添加到字符序列c中,即

从而得到字符串密文c,即为该段字符串的加密密文,其中字符串密文c的长度为

如图1所示,一种字符串的解密方法,包括如下几个步骤:

(1)转码:将某段待解密字符串密文逐个字符转换成数值型数据,得到高位数值序列和低位数值序列具体转换关系表述如下:

首先将某段待解密字符串密文中逐个字符转换为数值数据,即采用unicode2native(·)函数,将单个汉字转换为区位码数值数据,表示为[区数值数据,位数值数据],或将可显示ascii码字符转换为ascii码数值数据,表示为[0,ascii码数值数据],都可用数据[ri1,ri2]表示;

然后将各个数值型数据[ri1,ri2]对应组合得到高位数值序列和低位数值序列

接着逐个检查低位数值序列r2中是否有ri2=32的元素,如果是,则将对应高位数值序列r1中后一元素ri+11数值加1,并删除该数值为32的元素ri2和对应高位数值序列r1中的元素ri1;

最后得到高位数值序列和低位数值序列其中数值序列r1、r2的长度为某段待解密字符串密文的长度为

(2)产生混沌序列:

首先利用外部解密密钥按照如下所示公式分别计算得到混沌系统的初值参数初始迭代步数和抽取间隔

其中,从而保证的整数,的整数,的整数,可见混沌系统的初值参数初始迭代步数和抽取间隔不仅与外部密钥有关,而且会随着待解密字符串密文变化;

然后由初值和参数对如下公式所示的logistic混沌系统进行迭代,k表示迭代次数(k=1,2,...),表示第k次迭代得到的混沌信号,

得到混沌序列从第个元素开始每隔个元素取1个,从而形成长度为的混沌序列并从第个元素开始每隔个元素取1个,从而形成长度为的混沌序列

(3)高位、低位数值序列反置乱:

将混沌序列按升序排序,根据序列排序前、后的位置变化置乱规则,对高位数值序列进行反置乱,得到反置乱后的高位数值序列同时将混沌序列按升序排序,根据序列排序前、后的位置变化置乱规则,对低位数值序列进行反置乱,得到反置乱后的低位数值序列

(4)转码:设定一个空字符串pp,将反置乱后的高位数值序列和反置乱后的低位数值序列中对应元素依次进行数值与字符的转换,具体转换关系表述如下,

如果

首先判断,如果那么将对应低位数值数据加128,即

然后判断,如果那么在字符序列pp中添加1个空格,即pp=[pp,”];否则利用native2unicode(·)函数将数值数据转换为单个汉字,并添加到字符序列pp中,即

如果

首先判断,如果那么将对应低位数值数据减128,即

然后利用char(·)函数将数值数据转换为单个ascii码字符,并添加到字符序列pp中,即

从而得到字符序列pp,即为该段密文解密后恢复的字符串,其中字符序列pp的长度为

下面结合具体的实施例对本发明作进一步说明:

实施例1

按照上述具体实施方式中一种字符串的加密方法,步骤如下:

(1)将某段字符串“字符串加解密111aaa”逐个转换成数值型数据,得到高位数值序列p1={215,183,180,188,189,195,0,0,0,0,0,0}和低位数值序列p2={214,251,174,211,226,220,49,49,49,97,97,97},其中数值序列p1、p2的长度与该段字符串的长度一致,记为l=12;

(2)首先利用外部加密密钥(α=0.12345、β=3.75),根据上述具体实施方式中一种字符串的加密方法步骤(2)中公式进行计算,得到混沌系统的初值(x1)、参数(μ)、初始迭代步数(m)和抽取间隔(n1、n2)为,

x1=mod(0.305555555555556+0.12345,0.99999)+0.00001=0.429015555555556,

μ=3.75+mod(0.305555555555556,0.25)=3.805555555555555,

m=419+21=440,

n1=22+1=23,

n2=13+1=14,

然后由初值x1和参数μ对上述具体实施方式中一种字符串的加密方法步骤(2)中所示的logistic混沌系统进行迭代,得到混沌序列x,从第440个元素开始每隔23个元素取1个,从而形成长度为l=12的混沌序列y={0.890583241596402,0.913694386774153,0.542383620002776,0.905749750780190,0.674379516544880,0.792993406641482,0.306351378857341,0.941235153403690,0.860601448837542,0.764777723972489,0.346631613465010,0.745359933400717},并从第440个元素开始每隔14个元素取1个,从而形成长度为l=12的混沌序列z={0.890583241596402,0.505965297861060,0.327322707741922,0.934467507852149,0.612320360285809,0.324869392906346,0.556736338535452,0.933706949497245,0.272806232285981,0.205161375648756,0.588779639402925,0.178515911060263};

(3)混沌序列y按升序排序,根据序列y排序前、后的位置变化置乱规则{7,11,3,5,12,10,6,9,1,4,2,8},对高位数值序列p1={215,183,180,188,189,195,0,0,0,0,0,0}进行置乱,得到置乱后的高位数值序列同时将混沌序列z按升序排序,根据序列z排序前、后的位置变化置乱规则{12,10,9,6,3,2,7,11,5,1,8,4},对低位数值序列p2={214,251,174,211,226,220,49,49,49,97,97,97}进行置乱,得到置乱后的低位数值序列

(4)将置乱后的高位数值序列和置乱后的低位数值序列进行数值与字符的转换,得到字符串密文c,即为该段字符串的加密密文为“aa幢杰.{帽a租贾繁s”。

按照上述具体实施方式中一种字符串的解密方法,步骤如下:

(1)将某段待解密密文“aa幢杰.{帽a租贾繁s”逐个转换成数值型数据,得到高位数值序列r1={0,0,180,189,0,0,195,0,215,188,183,0}和低位数值序列r2={97,97,177,220,46,123,177,97,226,214,177,83},其中数值序列r1、r2的长度为

(2)首先利用外部解密密钥根据上述具体实施方式中一种字符串的解密方法步骤(2)中公式进行计算,得到混沌系统的初值参数初始迭代步数和抽取间隔为,

然后由初值和参数对上述具体实施方式中一种字符串的解密方法步骤(2)中所示的logistic混沌系统进行迭代,得到混沌序列从第440个元素开始每隔23个元素取1个,从而形成长度为的混沌序列0.913694386774153,0.542383620002776,0.905749750780190,0.674379516544880,0.792993406641482,0.306351378857341,0.941235153403690,0.860601448837542,0.764777723972489,0.346631613465010,0.745359933400717},并从第440个元素开始每隔14个元素取1个,从而形成长度为的混沌序列0.505965297861060,0.327322707741922,0.934467507852149,0.612320360285809,0.324869392906346,0.556736338535452,0.933706949497245,0.272806232285981,0.205161375648756,0.588779639402925,0.178515911060263};

(3)将混沌序列按升序排序,根据序列排序前、后的位置变化置乱规则{7,11,3,5,12,10,6,9,1,4,2,8},对高位数值序列r1={0,0,180,189,0,0,195,0,215,188,183,0}进行反置乱,得到反置乱后的高位数值序列同时将混沌序列按升序排序,根据序列排序前、后的位置变化置乱规则{12,10,9,6,3,2,7,11,5,1,8,4},对低位数值序列r2={97,97,177,220,46,123,177,97,226,214,177,83}进行反置乱,得到反置乱后的低位数值序列

(4)将反置乱后的高位数值序列和反置乱后的低位数值序列进行数值与字符的转换,得到字符序列pp,即为该段密文解密后恢复的字符串为“字符串加解密111aaa”。

实施例2

按照上述一种字符串的加密方法,某段待加密字符串为“字符串加解密111aaa”,一种字符串的加密步骤与具体实施例1相似,仅外部加密密钥发生细微变化:α=0.12345000000001;或β=3.75000000000001,字符串加密结果如表1所示。由表1可知,外部加密密钥的细微变化会引起字符串加密密文发生很大的变化,由此可见本专利所提一种字符串的加密方法对外部加密密钥具有敏感性。

表1外部加密密钥发生微变时,字符串加密结果

实施例3

按上述一种字符串的加密方法,其加密步骤与具体实施例1相似,仅某段待加密字符串(“字符串加解密111aaa”)发生细微变化:“子符串加解密111aaa”;或“字符川加解密111aaa”;或“字符串加解蜜111aaa”;或“字符串加解密211aaa”;或“字符串加解密110aaa”;或“字符串加解密111aac”,字符串加密结果如表2所示。由表2可见:待加密字符串平文信息的细微变化会引起加密密文的“面目全非”,由此可见本专利所提一种字符串加密方法对待加密字符串的平文信息具有敏感性。

表2待加密字符串发生微变时,字符串加密结果

由上述具体实施例2、3分析可知,本专利所提一种字符串加密方法所生成的字符串密文不仅与外部加密密钥密切相关,而且依赖于待加密字符串平文信息,因此本专利所提一种字符串加密方法可抵抗已知/选择明文攻击,具有很强的安全性。

实施例4

按照上述一种字符串的解密方法,某段待解密密文为“aa幢杰.{帽a租贾繁s”,一种字符串的解密步骤与具体实施例1相似,仅外部解密密钥发生细微变化:字符串密文解密结果如表3所示。由表3可知,外部解密密钥的细微变化会引起密文解密结果发生很大的变化,恢复出的字符串将是无用信息,由此可见本专利所提一种字符串的解密方法对外部解密密钥具有敏感性。

表3外部解密密钥发生微变时,密文解密结果

实施例5

按照上述一种字符串的解密方法,其解密步骤与具体实施例1相似,仅某段待解密字符串密文(“aa幢杰.{帽a租贾繁s”)发生细微变化:“ba幢杰.{帽a租贾繁s”;或“aa撞杰.{帽a租贾繁s”;或“aa幢杰,{帽a租贾繁s”;或“aa幢杰.{帽a阻贾繁s”;或“aa幢杰.{帽a租贾烦s”;或“aa幢杰.{帽a租贾繁s”,字符串解密结果如表4所示。由表4可知,待解密字符串密文的细微变化会引起密文解密结果发生很大的变化,难以恢复出原始的字符串,由此可见本专利所提一种字符串解密方法可抵抗唯密文攻击。

表4待解密字符串密文发生微变时,密文解密结果

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