本技术涉及数据加密领域,具体而言,涉及一种分组密码的保留格式加解密算法的实现方法及系统。
背景技术:
1、目前,在信息安全技术领域,有大量的信息数据需要传输及保存,而数据加密是计算机系统对信息进行保护的一种最可靠的办法,它利用密码技术对信息进行加密,提高了信息系统及数据的安全性和保密性。传统的对称和非对称算法,加密后的数据都是具有随机性的二进制数据,加密后原始数据格式及数据长度都会发生改变,在某些应用场景下,传统的加密方式不适合应用需求,例如数据加密的场景下,数据库中经常会存储一些个人敏感信息,如手机号、银行卡号、身份证号等,传统的密码模式会扩展数据,使数据长度和类型发生改变,进而需要修改数据库结构和应用程序来适应这些变化,成本高,代价大。而保留格式加解密算法是基于对称加密算法的一种加密或解密模式,特点是数据经过加密或解密之后,明文和密文的数据格式保持一致,因此保留格式加解密算法更适合数据库这种对加密后数据需要保持格式和长度不变的场景。然而现有的普遍接受的保留格式加解密算法的标准中公布的算法,在实际使用中,进行一次保留格式加解密算法,要多次使用分组密码算法,相比分组密码算法性能大大降低,给保留格式加解密算法的大规模推广带来极大的不便,尤其是对于在数据库中应用,数据库中绝大多数需要加密的信息都是较短的数据,对于这部分数据的加密过程有较大优化空间。
技术实现思路
1、本技术的主要目的在于提供一种分组密码的保留格式加解密算法的实现方法和系统,以实现充分利用分组密码的并行加密优势,提高保留格式加解密算法的加解密性能。
2、为了实现上述目的,本技术提供了:一种分组密码的保留格式加解密算法的实现方法,所述方法用于对明文或密文数据进行对应的加密或解密操作,所述方法包括:
3、输入待加密或待解密的多组数据xi,其中,i表示当前数据的组数,i=1~k,k表示一次分组加密并行运算的组数;
4、对多组所述数据xi进行预处理,输出与数据对应的预处理值ai和bi,以及计算各组数据对应的临时初始明文数据pi值;
5、对多个所述pi值拼接后进行分组密码的并行加密运算,输出pi对应的密文di;
6、执行核心加密或解密算法流程,包括:计算核心算法中间值qi,对qi值和di异或运算,对异或后的结果进行拼接,然后作为输入,进行分组密码的并行加密运算,输出对应的密文si;
7、所述核心算法流程还包括:对所述密文si进行数据转换,并更新所述预处理值ai和bi;
8、循环执行10次所述核心算法流程后,输出密文组或明文组ai||bi。
9、进一步改进的是,对多组所述数据xi进行预处理,输出与数据xi对应的预处理值ai和bi,以及计算各组数据对应的临时初始明文数据pi 值,包括:
10、输出所述预处理值ai,ai=[1…ui];
11、输出所述预处理值bi,bi=[ui +1…ni ];
12、计算各组数据对应的pi值,
13、pi= [1]1||[2]1||[1]1||[radix]3||[10]1||[ui mod 256]1 ||[ni]4||[t]4;
14、其中,ni 为第i组明文或密文的长度,,radix为字符集中元素个数,t为调整因子长度。
15、进一步改进的是,对多个所述pi值拼接后进行分组密码的并行加密运算,输出pi对应的密文di,包括:
16、对多个所述pi值按照其对应数据xi的输入顺序进行拼接,得到由多个pi值组成的数据组:p1…pk;
17、调用分组密码并行加密函数,对多个pi值组成的数据组完成一次分组密码的并行加密运算,并输出与数据组中pi对应的密文di,具体的,d1…dk=enc_block(p1…pk)。
18、进一步改进的是,执行核心加密算法流程,包括:计算核心算法中间值qi,对qi值和di异或运算,对异或后的结果进行拼接,然后作为输入,进行分组密码的并行加密运算,输出对应的密文si,具体包括:
19、计算qi值,qi= t|| [0](-t-bi-1) mod 16 ||[j]1|| [ numradix(bij)]bi;
20、对qi值和di异或运算,bufi=qi^di;
21、输出密文si,s1…sk=enc_block(buf1…bufk);
22、其中,t为调整因子,j为当前核心算法流程执行的次数,bij表示第j轮循环时bi的值,[numradix(bij)]bi表示将bij转换为radix进制数后占用bi个字节,,其中,vi=ni-ui;
23、所述核心加密算法流程还包括:对所述密文si进行数据转换,并更新所述预处理值ai和bi,包括:
24、将所述密文si转换为二进制数,具体的,yi= num(si);
25、计算ci,ci= (numradix(ai)+yi) mod radixmi;
26、其中,j表示当前核心算法流程的循环数,若当前循环数j为偶数,则mi=ui;否则mi=vi;
27、计算ci,ci=strmradix(ci),其中,strmradix(ci)表示把radix进制数ci转换成数字串;
28、更新所述预处理值ai和bi,ai=bi、bi= ci。
29、进一步改进的是,执行核心解密算法流程,包括:计算核心算法中间值qi,对qi值和di异或运算,对异或后的结果进行拼接,然后作为输入,进行分组密码的并行加密运算,输出对应的密文si,具体包括:
30、计算qi值,qi= t|| [0](-t-bi-1) mod 16|| [j]1 ||[ numradix(aij)]bi;
31、对qi值和di异或运算,bufi=qi^di;
32、输出密文si,s1…sk=enc_block(buf1…bufk);
33、其中,t为调整因子,j为当前核心算法流程执行的次数,aij表示第j轮循环时ai的值, [numradix(aij)]bi表示将aij转换为radix进制数后占用bi个字节,,其中,vi=ni-ui;
34、所述核心解密算法流程还包括:对所述密文si进行数据转换,并更新所述预处理值ai和bi,包括:
35、将所述密文si转换为二进制数,具体的,yi= num(si);
36、计算ci,ci= (numradix(bi)-yi) mod radixmi;
37、其中,j表示当前核心算法流程的循环数,若当前循环数j为偶数,则mi=ui;否则mi=vi;
38、计算ci,ci=strmradix(ci),其中,strmradix(ci)表示把radix进制数ci转换成数字串;
39、更新所述预处理值ai和bi,bi=ai、ai= ci。
40、进一步改进的是,循环执行10次所述核心算法流程后,输出密文组ai||bi,其中,一次所述循环计算流程包括:
41、for j(0≤j≤9);
42、qi= t|| [0](-t-bi-1) mod 16|| [j]1|| [ numradix(bij)]bi;
43、bufi=qi^di;
44、s1…sk=enc_block(buf1…bufk);
45、yi= num(si);
46、若j为偶数,则mi=ui;否则mi=vi;
47、ci= (numradix(ai)+yi) mod radixmi;
48、ci= strmradix(ci);
49、ai=bi、bi= ci。
50、进一步改进的是,循环执行10次所述核心算法流程后,输出明文组ai||bi,其中,一次所述循环计算流程包括:
51、for j(0≤j≤9);
52、qi= t|| [0](-t-bi-1) mod 16|| [j]1 ||[ numradix(aij)]bi;
53、bufi=qi^di;
54、s1…sk=enc_block(buf1…bufk);
55、yi= num(si);
56、若j为偶数,则mi=ui;否则mi=vi;
57、ci= (numradix(bi)-yi) mod radixmi;
58、ci= strmradix(ci);
59、bi=ai、ai= ci。
60、本实施例进一步公开了一种分组密码的保留格式加解密算法的实现系统,包括:
61、输入模块,用于输入多组待加密或待解密的数据xi;
62、预处理模块,用于对多组所述数据xi进行预处理,输出与数据对应的预处理值ai和bi,以及计算各组数据对应的临时初始明文数据pi值;
63、加解密模块,用于对多个pi值拼接后进行分组密码的并行加密运算,输出pi对应的密文di;
64、还用于执行核心加密或解密算法流程,包括:计算核心算法中间值qi,对qi值和di异或运算,对异或后的结果进行拼接,然后作为输入,进行分组密码的并行加密运算,输出对应的密文si,对所述密文si进行数据转换,并更新所述预处理值ai和bi;
65、输出模块,用于在核心加密或解密算法流程执行完毕后输出密文组或明文组ai||bi。
66、进一步改进的是,加解密模块,用于对多个临时初始明文数据pi值拼接后进行分组密码的并行加密运算,输出pi对应的密文di,包括:
67、对多个所述pi值按照其对应数据xi的输入顺序进行拼接,得到由多个pi值组成的数据组:p1…pk;
68、调用分组密码并行加密函数,对多个pi值组成的数据组完成一次分组密码的并行加密运算,并输出与数据组中pi对应的密文di,具体的,d1…dk=enc_block(p1…pk)。
69、进一步改进的是,加解密模块,还用于执行核心加密或解密算法流程,包括:计算核心算法中间值qi,对qi值和di异或运算,对异或后的结果进行拼接,然后作为输入,进行分组密码的并行加密运算,输出对应的密文si,对所述密文si进行数据转换,并更新所述预处理值ai和bi,包括:
70、计算qi值,在加密时:qi= t|| [0](-t-bi-1) mod 16|| [j]1|| [ numradix(bij)]bi;
71、在解密时:qi= t|| [0](-t-bi-1) mod 16|| [j]1|| [ numradix(aij)]bi;
72、对qi值和di异或运算,bufi=qi^di;
73、输出对应的密文si,s1…sk=enc_block(buf1…bufk);
74、将密文si转换为二进制数,yi= num(si);
75、计算ci,在加密时:ci= (numradix(ai)+yi) mod radixmi;
76、在解密时:ci= (numradix(bi)-yi) mod radixmi;
77、若当前循环数j为偶数,则mi=ui;否则mi=vi;
78、计算ci,ci=strmradix(ci);
79、更新预处理值ai和bi,在加密时:ai=bi、bi= ci;
80、在解密时:bi= ai、ai= ci。
81、本发明提供的分组密码的保留格式加解密算法的实现方法及系统,与现有技术相比,其有益效果为:通过将保留格式加解密算法中的prf函数分解为多次单独的分组加密,而且利用分组密码可以并行运算的特性,一次并行分组加密即可完成对多组数据的加密流程,从而实现保留格式加解密算法的并行运算,相比于传统的保留格式加解密算法的实现方法,本发明的技术方案可以大幅提高保留格式加解密算法的性能。
1.一种分组密码的保留格式加解密算法的实现方法,其特征在于:所述方法用于对明文或密文数据进行对应的加密或解密操作,所述方法包括:
2.如权利要求1所述的分组密码的保留格式加解密算法的实现方法,其特征在于:对多组所述数据xi进行预处理,输出与数据xi对应的预处理值ai和bi,以及计算各组数据对应的临时初始明文数据pi 值,包括:
3.如权利要求2所述的分组密码的保留格式加解密算法的实现方法,其特征在于:对多个所述pi值拼接后进行分组密码的并行加密运算,输出pi对应的密文di,包括:
4.如权利要求3所述的分组密码的保留格式加解密算法的实现方法,其特征在于:执行核心加密算法流程,包括:计算核心算法中间值qi,对qi值和di异或运算,对异或后的结果进行拼接,然后作为输入,进行分组密码的并行加密运算,输出对应的密文si,具体包括:
5.如权利要求3所述的分组密码的保留格式加解密算法的实现方法,其特征在于:执行核心解密算法流程,包括:计算核心算法中间值qi,对qi值和di异或运算,对异或后的结果进行拼接,然后作为输入,进行分组密码的并行加密运算,输出对应的密文si,具体包括:
6.如权利要求4所述的分组密码的保留格式加解密算法的实现方法,其特征在于:循环执行10次所述核心加密算法流程后,输出密文组ai||bi,其中,一次循环流程包括:
7.如权利要求5所述的分组密码的保留格式加解密算法的实现方法,其特征在于:循环执行10次所述核心解密算法流程后,输出明文组ai||bi,其中,一次循环流程包括:
8.一种分组密码的保留格式加解密算法的实现系统,其特征在于:包括:
9.如权利要求8所述的保留格式加解密算法的实现系统,其特征在于,
10.如权利要求8所述的保留格式加解密算法的实现系统,其特征在于,