发明内容
针对上述技术问题,本发明提出了一种加密解密方法,舍弃了传统的代数运算,利用简单的组合排列方式产生一个安全强度高的密钥,利用该密钥对待加密的明文按照预定的规则进行加密,其中,密钥的产生具有很强的随机性和扩展性,密钥在加密解密的过程中进行变化。
本发明提供的技术方案为:
一种加密解密方法,包括以下步骤:
1)选定待加密明文,处理器读取所述明文的m个二进制数码组成的序列;
2)在所述序列中从第A位二进制数码开始,每n个连续的二进制数码分成一组,由此形成多个数组,前A-1位二进制数码形成第一个数组,第一个数组或最后一个数组如果不足n个,则以1或0补足为n个,n>A≥1;
3)穷尽n个二进制数码的所有排列状况,每种排列状况代表一个数值,由此得到2n个数值;
4)再将所述2n个数值进行排序,穷尽2n个数值的所有排列状况,每种排列状况代表一个数列,得到2n!个数列;
5)在所述2n!个数列中随机抽取一个数列,作为第一密钥,将所述待加密明文的第一组n个二进制数码用该第一密钥进行加密,形成密文,再用该第一组n个二进制数码按照预定规则置换第一密钥中的n个二进制数码,由此形成第二密钥;
6)重复执行步骤5)直到待加密明文的所有组n个二进制数码均形成密文,解密为反向执行步骤5)和6)。
优选的是,所述的加密解密方法中,解密之后,将第一个数组或最后一个数组中补足的1或0去除。
优选的是,所述的加密解密方法中,在所述步骤5)中,将所述待加密明文的第一组n个二进制数码用该第一密钥进行加密的方法为:将所述第一组n个二进制数码与该第一密钥进行比对,第一次查找所述第一组n个二进制数码在该第一密钥中出现的位置,并正向或逆向计数该位置,得到位置值,将位置值作为所述第一组n个二进制数码的密文。
优选的是,所述的加密解密方法中,在所述步骤5)中,再用所述第一组n个二进制数码按照预定规则置换第一密钥中的n个二进制数码,由此形成第二密钥的方法如下:将该第一密钥中与所述第一组n个二进制数码相同的二进制数码移到该第一密钥的末尾,形成第二密钥。
优选的是,所述的加密解密方法中,在所述步骤6)中,重复执行步骤5),将所述待加密明文的第二组n个二进制数码用该第二密钥进行加密的方法为:将所述第二组n个二进制数码与该第二密钥进行比对,第二次查找所述第二组n个二进制数码在该第二密钥中出现的位置,并正向或逆向计数该位置,得到位置值,将位置值作为所述第二组n个二进制数码的密文,且由此形成第三密钥的方法如下:将该第二密钥中与所述第二组n个二进制数码相同的二进制数码移到该第二密钥的末尾,形成第三密钥。
优选的是,所述的加密解密方法中,在所述步骤5)和6)中,将明文的分组二进制数码与密钥进行比对时,第P次查找所述第k组n个二进制数码在第k密钥中出现的位置时,逆向或正向计数的规则为:定义正向计数的参数为f,逆向计数的参数为b,当0<P mod(b+f)≤b时,为逆向计数,否则为正向计数,b≥1,f≥0,k≤m。
优选的是,所述的加密解密方法中,还包括:在所述步骤1)中,可在所述序列的前方或/和后方添加至少一组干扰数据,解密之后,将所述序列的前方或/和后方添加的干扰数据去除。
本发明所述的加密解密方法,没有应用传统的常用的代数算法,利用简单的组合排序的方式得到安全强度高的密钥,处理器读取明文的m个二进制码组成的序列,将该序列中的每n个二进制编码分成一组,通过对这n个二进制编码进行排列,得到这n个二进制编码的所有排列状况,每种排列状况代表一个值,得到2n个值,穷尽这2n个值的排序方式,每种方式代表一个序列,得到2n!个序列,密钥从这2n!个序列中选择,密钥是随机抽取的,随机性强,安全性高,利用该密钥对明文进行加密,安全强度高,n的取值较小时,应用于一般的场合,n的取值越大,安全强度越高,n是变量,该加密解密方法具有很强的灵活性和扩展性。此外,利用本发明中的加密方法,结合通讯协议和硬件实现,具有高效低成本的特点,结合当前网络的发展和安全形势的需求,可以改变当前网络几乎全是明文通讯的现状。
具体实施方式
下面结合附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
如图1所示,本发明提供一种加密解密方法,包括以下步骤:1)选定待加密明文,处理器读取所述明文的m个二进制数码组成的序列;2)在所述序列中从第A位二进制数码开始,每n个连续的二进制数码分成一组,由此形成多个数组,前A-1位二进制数码形成第一个数组,第一个数组或最后一个数组如果不足n个,则以1或0补足为n个,n≥A≥1;3)穷尽n个二进制数码的所有排列状况,每种排列状况代表一个数值,由此得到2n个数值;4)再将所述2n个数值进行排序,穷尽2n个数值的所有排列状况,每种排列状况代表一个数列,得到2n!个数列;5)在所述2n!个数列中随机抽取一个数列,作为第一密钥,将所述待加密明文的第一组n个二进制数码用该第一密钥进行加密,形成密文,再用该第一组n个二进制数码按照预定规则置换第一密钥中的n个二进制数码,由此形成第二密钥;6)重复执行步骤5)直到待加密明文的所有组n个二进制数码均形成密文,解密为反向执行步骤5)和6),解密之后,将第一个数组或最后一个数组中补足的1或0去除。
在该加密解密方法中,在步骤5)中,将待加密明文的第一组n个二进制数码用该第一密钥进行加密的方法为:将第一组n个二进制数码与该第一密钥进行比对,第一次查找第一组n个二进制数码在该第一密钥中出现的位置,并正向或逆向计数该位置,得到位置值,将位置值作为第一组n个二进制数码的密文,再用第一组n个二进制数码按照预定规则置换第一密钥中的n个二进制数码,由此形成第二密钥的方法如下:将该第一密钥中与第一组n个二进制数码相同的二进制数码移到该第一密钥的末尾,第一密钥中的其他的二进制数码的排列不发生变化,形成第二密钥。
在步骤6)中,重复执行步骤5),将待加密明文的第二组n个二进制数码用该第二密钥进行加密的方法为:将第二组n个二进制数码与该第二密钥进行比对,第二次查找第二组n个二进制数码在该第二密钥中出现的位置,并正向或逆向计数该位置,得到位置值,将位置值作为所述第二组n个二进制数码的密文,且由此形成第三密钥的方法如下:将该第二密钥中与第二组n个二进制数码相同的二进制数码移到该第二密钥的末尾,形成第三密钥。
在步骤5)和步骤6)中,将明文的分组二进制数码与密钥进行比对时,第P次查找所述第k组n个二进制数码在第k密钥中出现的位置时,逆向或正向计数的规则为:定义正向计数的参数为f,逆向计数的参数为b,当0<Pmod(b+f)≤b时,为逆向计数,否则为正向计数,b≥1,f≥0,k≤m,P mod(b+f)为第P次查找的次数P对参数b+f的和进行取模运算。
在步骤1)中,在序列的前方或/和后方添加至少一组干扰数据,解密之后,将序列的前方或/和后方添加的干扰数据去除。
在步骤5)和步骤6)中,位置值的取值范围为(0~2n-1),保证了通过位置值得出的密文在n个二进制数码所代表的2n个数值当中,若位置值从0开始计数,得到的位置值为n个二进制数码的密文;若位置值从1开始计数,得到的位置值减去1为n个二进制数码的密文。
明文可以是固定数据,也可以是流数据,当明文是固定数据时,在对待加密明文进行加密时,可在明文的m个二进制编码形成的序列前方或/和后方后附加由随机数发生器或物理噪声源产生的二进制编码,形成一个干扰序列,对该干扰序列执行步骤2)至步骤6),使加密后的明文的安全性更高,被破解的难度增加。对该干扰序列形成的密文,解密之后,将附加的二进制编码去掉。
实施例1:明文如下:张三,对应二进制:11010101110001011100100011111101,按n=2进行分组,穷尽2个二进制数码的所有排列状况,每种排列状况代表一个数值,由此得到4个数值,00,01,10,11,将这4个数值进行排序,穷尽4个数值的所有排列状况,每种排列状况代表一个数列,得到4*3*2*1=24个数列如下:(00,01,10,11),(00,01,11,10),(00,10,01,11),(00,10,11,01),(00,11,01,10),(00,11,10,01),(01,00,10,11),(01,00,11,10),(01,10,00,11),(01,10,11,00),(01,11,00,10),(01,11,10,00),(10,00,01,11),(10,00,11,01),(10,01,00,11),(10,01,11,00),(10,11,00,01),(10,11,01,00),(11,00,01,10),(11,00,10,01),(11,01,00,10),(11,01,10,00),(11,10,00,01),(11,10,01,00),在这24个序列中随机选择1个序列作为密钥,(00,01,10,11),用来处理明文,处理器读取明文的32个二进制数码组成的序列,按n=2进行分组:[11010101110001011100100011111101],设定正向计数的参数f=1,逆向计数的参数b=1,第一密钥是(00,01,10,11),将明文中的第一组二进制数码11用第一密钥进行加密,第一组二进制数码11与第一密钥中的二进制数码进行比对,第一次查找第一组二进制数码11在第一密钥中出现的位置,第一次的次数1对参数b+f的和2取模,取模的值是1等于逆向计数的参数b=1,所以此处是逆向计数,则逆向计数该位置值,得到位置值0(位置值从0开始计数,若位置值从1开始计数,得到的位置值减去1为对应的密文),则对应密文为00,将第一密钥中与明文中相同的二进制数码11移至第一密钥中最后的位置,由于11在第一密钥中处于最后的位置,所以产生的第二密钥为(00,01,10,11),接着处理明文中的第2组二进制数码01,将第2组二进制数据01与第二密钥中的二进制数码进行比对,第二次查找第2组二进制数码01在第二密钥中出现的位置,第二次的次数2对参数b+f的和2取模,取模值是0,所以此处是正向计数,则正向计数该位置值,得到位置1(位置值从0开始计数,若位置值从1开始计数,得到的位置值减去1为对应的密文),产生的密文为01,第二密钥中的二进制数码01移至第二密钥中最后的位置,产生第三密钥,第三密钥为(00,10,11,01),重复按上述方式处理,直至得出所有的密文,处理结果如下:
序号 |
原始明文组 |
密钥序列 |
密文 |
下一组的密钥 |
1 |
11 |
(00,01,10,11) |
00 |
(00,01,10,11) |
2 |
01 |
(00,01,10,11) |
01 |
(00,10,11,01) |
3 |
01 |
(00,10,11,01) |
00 |
(00,10,11,01) |
4 |
01 |
(00,10,11,01) |
11 |
(00,10,11,01) |
5 |
11 |
(00,10,11,01) |
01 |
(00,10,01,11) |
6 |
00 |
(00,10,01,11) |
00 |
(10,01,11,00) |
7 |
01 |
(10,01,11,00) |
10 |
(10,11,00,01) |
8 |
01 |
(10,11,00,01) |
11 |
(10,11,00,01) |
9 |
11 |
(10,11,00,01) |
10 |
(10,00,01,11) |
10 |
00 |
(10,00,01,11) |
01 |
(10,01,11,00) |
11 |
10 |
(10,01,11,00) |
11 |
(01,11,00,10) |
12 |
00 |
(01,11,00,10) |
10 |
(11,00,10,01) |
13 |
11 |
(11,00,10,01) |
11 |
(00,10,01,11) |
14 |
11 |
(00,10,01,11) |
11 |
(00,10,01,11) |
15 |
11 |
(00,10,01,11) |
00 |
(00,10,01,11) |
16 |
01 |
(00,10,01,11) |
10 |
(00,10,11,01) |
最终密文:[00 01 00 11 01 00 10 11 10 01 11 10 11 11 00 10],解密时逆向处理即可,其中,正向计数的参数和逆向计数的参数取值不同,得到的密文也是不同的。
一般来说,密钥长度越大,对应的密钥空间就越大,攻击者使用穷举猜测密码的难度就越大,而且,利用复杂的数学运算生成的密钥更不容易破解,但是,利用复杂的数学运算形成的长度长的密钥,具有加密解密慢的特点,对计算机的处理能力要求也高。在本发明中,用n个二进制编码,通过对这n个二进制编码进行排列,得到这n个二进制编码的所有排列状况,每种排列状况代表一个值,得到2n个值,穷尽这2n个值的排序方式,每种方式代表一个序列,得到2n!个序列,密钥从这2n!个序列种选择,仅用组合排序的方式得到的密钥的安全强度很高。对于高速大量流数据的处理,需要极高的处理速度,这时候配合本发明中的加密方法,每隔一段流数据换一组密码,在每段流数据内按照本发明中的加密方式处理,但每段流数据的第一密钥不同,这时候,n=1或2就足以满足安全强度。利用本发明中的方式产生的密钥对待加密的明文进行加密,n=5时,该加密解密的强度基本上与最早期的一些著名的加密方法相当;当n=16时,该加密解密的强度足以与20世纪初期的流行的加密方法相比;当n>32时,利用当前的32位计算机进行处理时已经比较勉强了,当n>64时,使用最新的64位计算机都无法直接进行处理了,按照该加密解密方法设计专用CPU,那么没有许多的规则框架及各类基础数学运算的实现要求限定约束,该专用CPU的处理能力完全足够进行高强度算法的处理,按照目前的工艺和技术水平,设计出足以处理n>256的低成本专用处理芯片,这样的计算能力以目前的64位计算机来说是无法想象的。本发明中的加密解密方法,只利用了组合排序的方式,非常简单,根据二进制码个数n的不同,具备很强的扩展性、灵活性以及安全性,根据应用背景的不同设定不同的安全强度。
尽管本发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本发明的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。