1.本发明涉及信息加密技术领域,特别涉及一种基于分层置乱的字符串加密方法。
背景技术:2.随着社会的发展,信息资源逐渐成为人们生活的重要组成部分,信息安全也随之成为人们研究的热门课题,同时随着网络通讯技术的发展,对于数据特别是字符串通讯的安全性、便捷性需求逐渐增加。在现有技术中,主要对数据进行简单取反、位置交换、异或,以及des或ras混合加密,加密性能有待提高。现有的中文字符加密算法,所得的大多数密文可读性及可复制性太差,出现太多不易书写或者辨认的密文字符,也没有综合中文、英文字符的特点,提出一套简单方便、安全可靠的加密算法。同时由于混沌系统和密码学之间存在着一些自然联系,混沌系统作为一种天然的密码系统,被引入到密码学领域。在此情况下,结合混沌信号的密码特性,提出一套具有良好抗攻击性能的基于分层置乱的字符串加密方法,显得尤为重要。
技术实现要素:3.发明目的:本发明的目的是为了解决现有技术中的不足,提供一种基于分层置乱的字符串加密方法,将某段待加密字符串进行数值型数据、10bits二进制转换,以及二进制矩阵的按行分层,并利用混沌信号的置乱规则分别对二进制分层序列进行置乱,按实时更新的置乱拼接规则将置乱后的二进制分层序列进行不同的拼接操作,随后进行数值型数据、以及数值与字符的转换,从而得到该段待加密字符串的加密密文。本发明的一种基于分层置乱的字符串加密方法简单可行,可抵抗已知/选择明文攻击,具有很强的安全性。
4.技术方案:一种基于分层置乱的字符串加密方法,包括如下几个步骤:
5.(1)转码
6.首先,将某段待加密字符串a逐字转换为数值型数据[p
i1
,p
i2
],得到高位数值序列p1={p11,p12,...,p1i,....,p1
l
}={p
11
,p
21
,...,p
i1
,....,p
l1
}和低位数值序列p2={p21,p22,...,p2i,....,p2
l
}={p
12
,p
22
,...,p
i2
,....,p
l2
},
[0007]
然后,利用函数dec2bin(
·
,10),将高位数值序列p1中元素p1i逐个转换成10bits的二进制序列{pb1
i1
,pb1
i2
,pb1
i3
,pb1
i4
,pb1
i5
,pb1
i6
,pb1
i7
,pb1
i8
,pb1
i9
,pb1
i10
},并按列填入矩阵,得到二进制矩阵b1,
[0008]
[0009]
最后,利用函数dec2bin(
·
,10),将低位数值序列p2中元素p2i逐个转换成12bits的二进制序列{pb2
i1
,pb2
i2
,pb2
i3
,pb2
i4
,pb2
i5
,pb2
i6
,pb2
i7
,pb2
i8
,pb2
i9
,pb2
i10
},并按列填入矩阵,得到二进制矩阵b2,
[0010][0011]
其中,某段待加密字符串a包括gb2312字符集中的中文标点符号、gb2312字符集中双字节编码的汉字和ascll码值∈[32,126]的可见字符,某段待加密字符串a的长度表示为l,数值序列p1和p2的长度均为l,二进制矩阵b1和b2的大小为10
×
l;
[0012]
(2)分层置乱
[0013]
首先,对二进制矩阵b1按行进行分层,得到相应10个二进制分层序列,表示为同样对二进制矩阵b2按行进行分层,得到相应10个二进制分层序列,表示为其中j=1,2,...,9,10,
[0014]
接着,利用外部加密密钥α和β,按照如下公式(1)分别计算得到混沌系统的初值x1,参数μ,初始迭代步数m1、m2,以及抽取间隔n1、n2,
[0015]
令则
[0016][0017]
其中,分别表示二进制分层序列中含二进制
‘1’
的个数,函数表示为不大于ε的最大整数,外部密钥满足α∈(0,1),β∈(3.57,4),
[0018]
由混沌系统的初值x1和参数μ,对如下公式(2)所示logistic混沌映射进行迭代,式中k表示迭代次数、x
k+1
表示第k次迭代得到的混沌信号,k=1,2,...,max(m1+10n1,m2+10n2),
[0019]
x
k+1
=μ
×
xk×
(1-xk)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
[0020]
得到混沌序列x,从第m1个元素开始每隔n1个元素取1个,从而形成长度为10的混沌序列y,并从第m2个元素开始每隔n2个元素取1个,从而形成长度为10的混沌序列z,
[0021]
将混沌序列y按降序排序,将序列y排序前、后的位置变化置乱规则记为t1={t11,t12,...,t19,t1
10
},同时将混沌序列z按降序排序,将序列z排序前、后的位置变化置乱规则记为t2={t21,t22,...,t29,t2
10
},
[0022]
利用位置变化置乱规则t1对二进制分层序列进行置乱,得到置乱后的二进制分层序列同样利用位置变化置乱规则t2对二进制分层序列进行置乱,得到置乱后的二进制分层序列其中j=1,2,...,9,10;
[0023]
然后,将置乱后的二进制分层序列和依次进行如下置乱拼接操作:
[0024]
s0:令j=1,置乱拼接规则参数
[0025]
s1:判断置乱拼接规则参数rule_perm的数值,
[0026]
如果rule_perm=0,则将置乱后的二进制分层序列和置乱后的二进制分层序列顺序拼接,即
[0027]
如果rule_perm=1,则将置乱后的二进制分层序列先前后翻转,再和置乱后的二进制分层序列顺序拼接,即
[0028]
如果rule_perm=2,则将置乱后的二进制分层序列和前后翻转的置乱后二进制分层序列顺序拼接,即
[0029]
如果rule_perm=3,则将置乱后的二进制分层序列和置乱后的二进制分层序列顺序拼接,并将拼接后序列前后翻转,即
[0030]
如果rule_perm=4,则将置乱后的二进制分层序列和置乱后的二进制分层序列顺序拼接,即
[0031]
如果rule_perm=5,则将置乱后的二进制分层序列先前后翻转,再和置乱后的二进制分层序列顺序拼接,即
[0032]
如果rule_perm=6,则将置乱后的二进制分层序列和前后翻转的置乱后二进制分层序列顺序拼接,即
[0033]
否则,则将置乱后的二进制分层序列和置乱后的二进制分层序列顺序
拼接,并将拼接后序列前后翻转,即
[0034]
从而得到置乱拼接后的二进制分层序列
[0035]
s2:首先将置乱拼接后的二进制分层序列中元素从头到尾依次正向以10个元素为单位进行分组,得到个分组序列并利用bin2dec()函数依次将各分组序列转换为数值型数据,将转换后的数值型数据之和记为dfj,其中函数表示为不小于2l/10的最小整数,
[0036]
然后更新置乱拼接规则参数rule_perm=mod(dfj,8),且令j=j+1,接着判断j的大小,如果j≤10,则转入步骤s1,否则转入步骤s3,
[0037]
s3:结束二进制分层序列的置乱拼接操作,从而得到置乱拼接后的二进制分层序列,表示为并将其按行依次填入二进制矩阵cc中,表示如下,
[0038][0039]
最后,按列依次将二进制矩阵cc的列序列cc(:,m)转换成数值型数据d1m和d2m,其中m=1,2,3,...,2l,从而得到数值序列d={d1,d2,...,d
4l-1
,d
4l
}={d11,d21,d12,d22,...,d1
2l
,d2
2l
};
[0040]
(3)转码
[0041]
利用函数char(
·
),将数值序列d={d1,d2,...,d
4l-1
,d
4l
}中元素依次进行数值与字符的转换,得到字符序列c,即为该段待加密字符串的加密密文,其中字符序列c的长度为4l。
[0042]
进一步地,一种基于分层置乱的字符串加密方法里步骤(1)中所述的将某段待加密字符串a逐字转换为数值型数据[p
i1
,p
i2
],是指将某段待加密字符串a中逐个字符采用unicode2native(
·
)函数转换为数值型数据,即[p
i1
,p
i2
]=unicode2native(ai),将单个汉字转换为区位码数值数据,表示为[区数值数据,位数值数据],或将ascii码值属于[32,126]的可见字符转换为ascii码数值数据,表示为[0,ascii码数值数据],从而得到高位数值序列p1={p11,p12,...,p1i,....,p1
l
}={p
11
,p
21
,...,p
i1
,....,p
l1
}和低位数值序列p2={p21,p22,...,p2i,....,p2
l
}={p
12
,p
22
,...,p
i2
,....,p
l2
}。
[0043]
进一步地,一种基于分层置乱的字符串加密方法里步骤(2)中所述的按列依次将二进制矩阵cc的列序列cc(:,m)转换成数值型数据d1m和d2m,是指取列序列cc(:,m)的前5位且在其首端加上二进制
‘1’
、尾端加上二进制
‘0’
,并采用bin2dec()函数转换成数值型数
据,得到数值型数据d1m,即d1m=bin2dec(['1',(cc(1:5,m))
t
,'0']);同时取列序列cc(:,m)的后5位且在其首端加上二进制
‘1’
、尾端加上二进制
‘0’
,并采用bin2dec()函数转换成数值型数据,得到数值型数据d2m,即d2m=bin2dec(['1',(cc(6:10,m))
t
,'0'])。
[0044]
有益效果:本发明利用混沌信号的置乱规则,对某段待加密字符串进行数值型数据、10bits二进制转换,以及二进制矩阵按行分层所得的二进制分层序列进行置乱,按实时更新的置乱拼接规则进行不同的拼接操作,从而得到该段待加密字符串的加密密文。本发明的一种基于分层置乱的字符串加密方法简单可行,可抵抗已知/选择明文攻击,具有很强的安全性。
附图说明
[0045]
图1为本发明的一种基于分层置乱的字符串加密流程示意图;
具体实施方式
[0046]
如图1所示的一种基于分层置乱的字符串加密方法,包括如下几个步骤:
[0047]
(1)转码
[0048]
首先,将某段待加密字符串a中逐个字符采用unicode2native(
·
)函数转换为数值型数据,即[p
i1
,p
i2
]=unicode2native(ai),将单个汉字转换为区位码数值数据,表示为[区数值数据,位数值数据],或将ascii码值属于[32,126]的可见字符转换为ascii码数值数据,表示为[0,ascii码数值数据],从而得到高位数值序列p1={p11,p12,...,p1i,....,p1
l
}={p
11
,p
21
,...,p
i1
,....,p
l1
}和低位数值序列p2={p21,p22,...,p2i,....,p2
l
}={p
12
,p
22
,...,p
i2
,....,p
l2
},
[0049]
然后,利用函数dec2bin(
·
,10),将高位数值序列p1中元素p1i逐个转换成10bits的二进制序列{pb1
i1
,pb1
i2
,pb1
i3
,pb1
i4
,pb1
i5
,pb1
i6
,pb1
i7
,pb1
i8
,pb1
i9
,pb1
i10
},并按列填入矩阵,得到二进制矩阵b1,
[0050][0051]
最后,利用函数dec2bin(
·
,10),将低位数值序列p2中元素p2i逐个转换成12bits的二进制序列{pb2
i1
,pb2
i2
,pb2
i3
,pb2
i4
,pb2
i5
,pb2
i6
,pb2
i7
,pb2
i8
,pb2
i9
,pb2
i10
},并按列填入矩阵,得到二进制矩阵b2,
[0052][0053]
其中,某段待加密字符串a包括gb2312字符集中的中文标点符号、gb2312字符集中双字节编码的汉字和ascll码值∈[32,126]的可见字符,某段待加密字符串a的长度表示为l,数值序列p1和p2的长度均为l,二进制矩阵b1和b2的大小为10
×
l;
[0054]
(2)分层置乱
[0055]
首先,对二进制矩阵b1按行进行分层,得到相应10个二进制分层序列,表示为同样对二进制矩阵b2按行进行分层,得到相应10个二进制分层序列,表示为其中j=1,2,...,9,10,
[0056]
接着,利用外部加密密钥α和β,按照如下所示的公式分别计算得到混沌系统的初值x1,参数μ,初始迭代步数m1、m2,以及抽取间隔n1、n2,
[0057]
令则
[0058][0059]
其中,分别表示二进制分层序列中含二进制
‘1’
的个数,函数表示为不大于ε的最大整数,外部密钥满足α∈(0,1),β∈(3.57,4),
[0060]
由混沌系统的初值x1和参数μ,对如下公式所示的logistic混沌映射进行迭代,式中k表示迭代次数、x
k+1
表示第k次迭代得到的混沌信号,k=1,2,...,max(m1+10n1,m2+10n2),
[0061]
x
k+1
=μ
×
xk×
(1-xk)
[0062]
得到混沌序列x,从第m1个元素开始每隔n1个元素取1个,从而形成长度为10的混沌序列y,并从第m2个元素开始每隔n2个元素取1个,从而形成长度为10的混沌序列z,
[0063]
将混沌序列y按降序排序,将序列y排序前、后的位置变化置乱规则记为t1={t11,t12,...,t19,t1
10
},同时将混沌序列z按降序排序,将序列z排序前、后的位置变化置乱规则记为t2={t21,t22,...,t29,t2
10
},
[0064]
利用位置变化置乱规则t1对二进制分层序列进行置乱,得到置乱后的二进制分层序列同样利用位置变化置乱规则t2对二进制分层序列进行置乱,得到置乱后的二进制分层序列其中j=1,2,...,9,10;
[0065]
然后,将置乱后的二进制分层序列和依次进行如下置乱拼接操作:
[0066]
s0:令j=1,置乱拼接规则参数
[0067]
s1:判断置乱拼接规则参数rule_perm的数值,
[0068]
如果rule_perm=0,则将置乱后的二进制分层序列和置乱后的二进制分层序列顺序拼接,即
[0069]
如果rule_perm=1,则将置乱后的二进制分层序列先前后翻转,再和置乱后的二进制分层序列顺序拼接,即
[0070]
如果rule_perm=2,则将置乱后的二进制分层序列和前后翻转的置乱后二进制分层序列顺序拼接,即
[0071]
如果rule_perm=3,则将置乱后的二进制分层序列和置乱后的二进制分层序列顺序拼接,并将拼接后序列前后翻转,即
[0072]
如果rule_perm=4,则将置乱后的二进制分层序列和置乱后的二进制分层序列顺序拼接,即
[0073]
如果rule_perm=5,则将置乱后的二进制分层序列先前后翻转,再和置乱后的二进制分层序列顺序拼接,即
[0074]
如果rule_perm=6,则将置乱后的二进制分层序列和前后翻转的置乱后二进制分层序列顺序拼接,即
[0075]
否则,则将置乱后的二进制分层序列和置乱后的二进制分层序列顺序拼接,并将拼接后序列前后翻转,即
[0076]
从而得到置乱拼接后的二进制分层序列
[0077]
s2:首先将置乱拼接后的二进制分层序列中元素从头到尾依次正向以10个元素为单位进行分组,得到个分组序列并利用bin2dec()函数依次将各分组序列转换为数值型数据,将转换后的数值型数据之和记为dfj,其中函数表示为不小于2l/10的最小整数,
[0078]
然后更新置乱拼接规则参数rule_perm=mod(dfj,8),且令j=j+1,接着判断j的大小,如果j≤10,则转入步骤s1,否则转入步骤s3,
[0079]
s3:结束二进制分层序列的置乱拼接操作,从而得到置乱拼接后的二进制分层序列,表示为并将其按行依次填入二进制矩阵cc中,表示如下,
[0080][0081]
最后,依次取列序列cc(:,m)的前5位且在其首端加上二进制
‘1’
、尾端加上二进制
‘0’
,并采用bin2dec()函数转换成数值型数据,得到数值型数据d1m,即d1m=bin2dec(['1',(cc(1:5,m))
t
,'0']);同时依次取列序列cc(:,m)的后5位且在其首端加上二进制
‘1’
、尾端加上二进制
‘0’
,并采用bin2dec()函数转换成数值型数据,得到数值型数据d2m,即d2m=bin2dec(['1',(cc(6:10,m))
t
,'0']),其中m=1,2,3,...,2l,从而得到数值序列d={d1,d2,...,d
4l-1
,d
4l
}={d11,d21,d12,d22,...,d1
2l
,d2
2l
};
[0082]
(3)转码
[0083]
利用函数char(
·
),将数值序列d={d1,d2,...,d
4l-1
,d
4l
}中元素依次进行数值与字符的转换,得到字符序列c,即为该段待加密字符串的加密密文,其中字符序列c的长度为4l。
[0084]
下面结合具体的实施例对本发明作进一步说明:
[0085]
实施例1
[0086]
按照上述一种基于分层置乱的字符串加密方法,步骤如下:
[0087]
(1)转码
[0088]
首先,将某段待加密字符串a=“字符串“abc123!@#”的加密:先输入一个字符串,进行加密,最后将加密后的字符添加到一个空的string中输出。”,逐字转换为数值型数据,得到高位数值序列p1={215,183,180,161,0,0,0,0,0,0,0,0,0,161,181,188,195,163,207,202,200,210,184,215,183,180,163,189,208,188,195,163,215,186,189,188,195,186,181,215,183,204,188,181,210,184,191,181,0,0,0,0,0,0,214,202,179,161}和低位数值序列p2={214,251,174,176,97,98,99,49,50,51,33,64,35,177,196,211,220,
186,200,228,235,187,246,214,251,174,172,248,208,211,220,172,238,243,171,211,220,243,196,214,251,237,211,189,187,246,213,196,115,116,114,105,110,103,208,228,246,163},
[0089]
然后,利用dec2bin(
·
,10),将高位数值序列p1中元素p1i逐个转换成10bits的二进制序列{pb1
i1
,pb1
i2
,pb1
i3
,pb1
i4
,pb1
i5
,pb1
i6
,pb1
i7
,pb1
i8
,pb1
i9
,pb1
i10
},并按列填入矩阵,得到二进制矩阵b1,
[0090][0091]
最后,利用dec2bin(
·
,10),将低位数值序列p2中元素p2i逐个转换成12bits的二进制序列{pb2
i1
,pb2
i2
,pb2
i3
,pb2
i4
,pb2
i5
,pb2
i6
,pb2
i7
,pb2
i8
,pb2
i9
,pb2
i10
},并按列填入矩阵,得到二进制矩阵b2,
[0092][0093]
其中,某段待加密字符串a的长度表示为l=58,数值序列p1和p2的长度均为l=58,二进制矩阵b1和b2的大小均为10
×
58;
[0094]
(2)分层置乱
[0095]
首先,对二进制矩阵b1按行进行分层,得到相应10个二进制分层序列,表示为同样对二进制矩阵b2按行进行分层,得到相应10个二进制分层序列,表示为其中j=1,2,...,11,12,
[0096]
接着,利用外部加密密钥α=0.12345和β=3.75,按照如下公式分别计算得到混沌系统的初值x1,参数μ,初始迭代步数m1、m2,以及抽取间隔n1、n2,
[0097]
令则
[0098][0099]
由混沌系统的初值x1和参数μ,对logistic混沌映射进行迭代,得到混沌序列x,从第221个元素开始每隔205个元素取1个,从而形成长度为10的混沌序列y={0.208513889117461,0.921695552897348,0.861750550643000,0.934401238824754,0.697108481519377,0.583903143069433,0.888778102259309,0.907730481883299,0.407067361462072,0.322638967069882},并从第554个元素开始每隔83个元素取1个,从而形成长度为10的混沌序列z={0.840705983341677,0.439457289575278,0.252304066626676,0.947223094830140,0.786316006211482,0.267516869591975,0.326424649696977,0.585559374934936,0.684451732123479,0.939975908548840},
[0100]
将混沌序列y按降序排序,将序列y排序前、后的位置变化置乱规则记为t1={4,2,8,7,3,5,6,9,10,1},同时将混沌序列z按降序排序,将序列z排序前、后的位置变化置乱规则记为t2={4,10,1,5,9,8,2,7,6,3},
[0101]
利用位置变化置乱规则t1对二进制分层序列进行置乱,得到置乱后的二进制分层序列同样利用位置变化置乱规则t2对二进制分层序列进行置乱,得到置乱后的二进制分层序列其中j=1,2,...,9,10;
[0102]
然后,将置乱后的二进制分层序列和依次进行置乱拼接操作,得到二进制矩阵cc,
[0103][0104]
最后,按列依次将二进制矩阵cc的列序列cc(:,m)转换成数值型数据d1m和d2m,其中m=1,2,3,...,116,从而得到数值序列d={82,68,102,124,102,104,108,116,116,64,102,64,118,64,100,64,102,64,118,64,108,80,120,80,102,80,84,116,88,116,122,112,120,76,126,124,104,92,108,80,118,88,102,72,126,112,90,84,118,124,110,120,68,108,100,108,120,80,98,112,104,92,68,108,78,92,126,112,110,124,98,112,80,92,118,96,96,100,106,68,70,108,100,72,122,112,108,124,86,72,86,96,96,100,80,100,86,64,68,64,86,64,116,72,102,72,118,64,64,64,76,80,126,116,110,116,66,66,66,110,102,106,98,78,64,96,64,96,64,64,64,68,64,100,64,68,64,96,68,108,68,100,98,78,66,102,70,70,102,98,66,78,98,110,66,98,70,78,98,110,70,70,70,66,70,78,98,106,66,106,98,110,70,70,98,70,70,70,66,106,66,98,66,78,98,110,70,102,98,78,102,66,102,106,102,74,66,78,98,110,70,70,66,98,66,70,66,66,66,66,66,66,64,68,64,68,64,68,64,64,64,64,64,64,66,70,66,98,66,78,98,110};
[0105]
(3)转码
[0106]
利用函数char(
·
),将数值序列d中元素依次进行数值与字符的转换,得到字符序列c=“rdf|fhltt@f@v@d@f@v@lpxpfpttxtzpxl~|h\lpvxfh~pztv|nxdldlxpbph\dln\~pn|bpp\v``djdfldhzpl|vhv``dpdv@d@v@thfhv@@@lp~tntbbbnfjbn@`@`@@@d@d@d@`dlddbnbffffbbnbnbbfnbnfffbfnbjbjbnffbfffbjbbbnbnffbnfbfjfjbnbnffbbbfbbbbbb@d@d@d@@@@@@bfbbbnbn”,即为该段待加密字符串的加密密文,其中字符序列c的长度为232。
[0107]
实施例2
[0108]
按照上述一种基于分层置乱的字符串加密方法,某段待加密字符串为“字符串“abc123!@#”的加密:先输入一个字符串,进行加密,最后将加密后的字符添加到一个空的string中输出。”,其加密步骤与具体实施例1相似,仅外部加密密钥发生细微变化:α=
0.123450000001;或β=3.750000000001,字符串加密结果如表1所示。由表1可知,外部加密密钥的细微变化会引起字符串加密密文发生很大的变化,由此可见本专利所提一种基于分层置乱的字符串加密方法对外部加密密钥具有敏感性。
[0109]
表1外部加密密钥发生微变时,字符串加密结果
[0110][0111][0112]
实施例3
[0113]
按上述一种基于分层置乱的字符串加密方法,其加密步骤与具体实施例1相似,仅某段待加密字符串发生细微变化:“子符串“abc123!@#”的加密:先输入一个字符串,进行加密,最后将加密后的字符添加到一个空的string中输出。”;或“字符串“abc123!@#”的加蜜:先输入一个字符串,进行加密,最后将加密后的字符添加到一个空的string中输出。”;或“字符串“abc123!@#”的加密:先输入一个字符串,进行加密,最石将加密后的字符添加到一
个空的string中输出。”;或“字符串“abc123!@#”的加密:先输入一个字符串,进行加密,最后将加密后的字符添加到两个空的string中输出。”;或“字符串“abc123!@#”的加密:先输入一个字符串,进行加密,最后将加密后的字符添加至一个空的string中输出!”,字符串加密结果如表2所示。由表2可见:待加密字符串平文信息的细微变化会引起加密密文的“面目全非”,由此可见本专利所提一种基于分层置乱的字符串加密方法对待加密字符串的平文信息具有敏感性。
[0114]
表2待加密字符串发生微变时,字符串加密结果
[0115]
[0116]
[0117][0118]
由上述具体实施例2、3分析可知,本专利所提一种基于分层置乱的字符串加密方法所生成的字符串加密密文不仅与外部加密密钥密切相关,而且依赖于待加密字符串平文信息,因此本专利所提一种基于分层置乱的字符串加密方法可抵抗已知/选择明文攻击,具有很强的安全性。
技术特征:1.一种基于分层置乱的字符串加密方法,其特征在于,包括如下几个步骤:(1)转码首先,将某段待加密字符串a逐字转换为数值型数据[p
i1
,p
i2
],得到高位数值序列p1={p11,p12,...,p1
i
,....,p1
l
}={p
11
,p
21
,...,p
i1
,....,p
l1
}和低位数值序列p2={p21,p22,...,p2
i
,....,p2
l
}={p
12
,p
22
,...,p
i2
,....,p
l2
},然后,利用函数dec2bin(
·
,10),将高位数值序列p1中元素p1
i
逐个转换成10bits的二进制序列{pb1
i1
,pb1
i2
,pb1
i3
,pb1
i4
,pb1
i5
,pb1
i6
,pb1
i7
,pb1
i8
,pb1
i9
,pb1
i10
},并按列填入矩阵,得到二进制矩阵b1,最后,利用函数dec2bin(
·
,10),将低位数值序列p2中元素p2
i
逐个转换成12bits的二进制序列{pb2
i1
,pb2
i2
,pb2
i3
,pb2
i4
,pb2
i5
,pb2
i6
,pb2
i7
,pb2
i8
,pb2
i9
,pb2
i10
},并按列填入矩阵,得到二进制矩阵b2,其中,某段待加密字符串a包括gb2312字符集中的中文标点符号、gb2312字符集中双字节编码的汉字和ascll码值∈[32,126]的可见字符,某段待加密字符串a的长度表示为l,数值序列p1和p2的长度均为l,二进制矩阵b1和b2的大小为10
×
l;(2)分层置乱首先,对二进制矩阵b1按行进行分层,得到相应10个二进制分层序列,表示为同样对二进制矩阵b2按行进行分层,得到相应10个二进制分层序列,表示为其中j=1,2,...,9,10,接着,利用外部加密密钥α和β,按照如下公式(1)分别计算得到混沌系统的初值x1,参数μ,初始迭代步数m1、m2,以及抽取间隔n1、n2,
令则其中,分别表示二进制分层序列中含二进制
‘1’
的个数,函数表示为不大于ε的最大整数,外部密钥满足α∈(0,1),β∈(3.57,4),由混沌系统的初值x1和参数μ,对如下公式(2)所示logistic混沌映射进行迭代,式中k表示迭代次数、x
k+1
表示第k次迭代得到的混沌信号,k=1,2,...,max(m1+10n1,m2+10n2),x
k+1
=μ
×
x
k
×
(1-x
k
)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)得到混沌序列x,从第m1个元素开始每隔n1个元素取1个,从而形成长度为10的混沌序列y,并从第m2个元素开始每隔n2个元素取1个,从而形成长度为10的混沌序列z,将混沌序列y按降序排序,将序列y排序前、后的位置变化置乱规则记为t1={t11,t12,...,t19,t1
10
},同时将混沌序列z按降序排序,将序列z排序前、后的位置变化置乱规则记为t2={t21,t22,...,t29,t2
10
},利用位置变化置乱规则t1对二进制分层序列进行置乱,得到置乱后的二进制分层序列同样利用位置变化置乱规则t2对二进制分层序列进行置乱,得到置乱后的二进制分层序列其中j=1,2,...,9,10;然后,将置乱后的二进制分层序列和依次进行如下置乱拼接操作:s0:令j=1,置乱拼接规则参数s1:判断置乱拼接规则参数rule_perm的数值,如果rule_perm=0,则将置乱后的二进制分层序列和置乱后的二进制分层序列顺序拼接,即如果rule_perm=1,则将置乱后的二进制分层序列先前后翻转,再和置乱后的二进制分层序列顺序拼接,即
如果rule_perm=2,则将置乱后的二进制分层序列和前后翻转的置乱后二进制分层序列顺序拼接,即如果rule_perm=3,则将置乱后的二进制分层序列和置乱后的二进制分层序列顺序拼接,并将拼接后序列前后翻转,即如果rule_perm=4,则将置乱后的二进制分层序列和置乱后的二进制分层序列顺序拼接,即如果rule_perm=5,则将置乱后的二进制分层序列先前后翻转,再和置乱后的二进制分层序列顺序拼接,即如果rule_perm=6,则将置乱后的二进制分层序列和前后翻转的置乱后二进制分层序列顺序拼接,即否则,则将置乱后的二进制分层序列和置乱后的二进制分层序列顺序拼接,并将拼接后序列前后翻转,即从而得到置乱拼接后的二进制分层序列s2:首先将置乱拼接后的二进制分层序列中元素从头到尾依次正向以10个元素为单位进行分组,得到个分组序列并利用bin2dec()函数依次将各分组序列转换为数值型数据,将转换后的数值型数据之和记为df
j
,其中函数表示为不小于2l10的最小整数,然后更新置乱拼接规则参数rule_perm=mod(df
j
,8),且令j=j+1,接着判断j的大小,如果j≤10,则转入步骤s1,否则转入步骤s3,s3:结束二进制分层序列的置乱拼接操作,从而得到置乱拼接后的二进制分层序列,表示为并将其按行依次填入二进制矩阵cc中,表示如下,
最后,按列依次将二进制矩阵cc的列序列cc(:,m)转换成数值型数据d1
m
和d2
m
,其中m=1,2,3,...,2l,从而得到数值序列d={d1,d2,...,d
4l-1
,d
4l
}={d11,d21,d12,d22,...,d1
2l
,d2
2l
};(3)转码利用函数char(
·
),将数值序列d={d1,d2,...,d
4l-1
,d
4l
}中元素依次进行数值与字符的转换,得到字符序列c,即为该段待加密字符串的加密密文,其中字符序列c的长度为4l。2.根据权利要求1所述的一种基于分层置乱的字符串加密方法,其特征在于:步骤(1)中所述的将某段待加密字符串a逐字转换为数值型数据[p
i1
,p
i2
],是指将某段待加密字符串a中逐个字符采用unicode2native(
·
)函数转换为数值型数据,即[p
i1
,p
i2
]=unicode2native(a
i
),将单个汉字转换为区位码数值数据,表示为[区数值数据,位数值数据],或将ascii码值属于[32,126]的可见字符转换为ascii码数值数据,表示为[0,ascii码数值数据],从而得到高位数值序列p1={p11,p12,...,p1
i
,....,p1
l
}={p
11
,p
21
,...,p
i1
,....,p
l1
}和低位数值序列p2={p21,p22,...,p2
i
,....,p2
l
}={p
12
,p
22
,...,p
i2
,....,p
l2
}。3.根据权利要求1所述的一种基于分层置乱的字符串加密方法,其特征在于:步骤(2)中所述的按列依次将二进制矩阵cc的列序列cc(:,m)转换成数值型数据d1
m
和d2
m
,是指取列序列cc(:,m)的前5位且在其首端加上二进制
‘1’
、尾端加上二进制
‘0’
,并采用bin2dec()函数转换成数值型数据,得到数值型数据d1
m
,即d1
m
=bin2dec(['1',(cc(1:5,m))
t
,'0']);同时取列序列cc(:,m)的后5位且在其首端加上二进制
‘1’
、尾端加上二进制
‘0’
,并采用bin2dec()函数转换成数值型数据,得到数值型数据d2
m
,即d2
m
=bin2dec(['1',(cc(6:10,m))
t
,'0'])。
技术总结本发明公开了一种基于分层置乱的字符串加密方法,步骤如下:将某段待加密字符串进行数值型数据以及10bits二进制转换,得到二进制矩阵B1和B2;分别对二进制矩阵B1和B2按行进行分层,并利用混沌信号的置乱规则分别对二进制分层序列进行置乱,再按置乱拼接规则将置乱后的二进制分层序列进行不同的拼接操作,且实时更新置乱拼接规则参数,然后进行数值型数据转换,得到数值序列D;最后进行数值与字符的转换,从而得到字符序列C,即为该段待加密字符串的加密密文。本发明的一种基于分层置乱的字符串加密方法简单可行,可抵抗已知/选择明文攻击,具有很强的安全性。具有很强的安全性。具有很强的安全性。
技术研发人员:刘焰森 盛苏英 陆国平 张小美 吴新华 张嘉豪 范云雷 杜宇笙
受保护的技术使用者:南通大学
技术研发日:2022.04.06
技术公布日:2022/7/5