发明内容
为了解决上述问题,本发明提出了一种数据变换方法和装置,能够实现UID的加密运算。
为了达到上述目的,本发明提出了一种数据变换方法,所述方法包括:
根据预定执行次数,重复执行第一加密操作;其中,将原始数据作为第一次第一加密操作的输入数据,将第i次执行第一加密操作的输出数据,作为执行第i+1次第一加密操作的输入数据;并将最后一次第一加密操作的输出数据作为原始数据对应的加密数据;其中,i为小于所述预定执行次数的正整数;
输出所述原始数据对应的加密数据。
优选地,所述第一加密操作包括:
对本次第一加密操作的输入数据执行第一线性置换;
对第一线性置换的置换结果执行第一非线性置换,得到本次第一加密操作的输出数据。
优选地,所述执行第一线性置换包括:
根据第一置换数组的各个元素,对所述本次第一加密操作的输入数据中每一位数据进行置换,得到本次第一线性置换的置换结果,包括:
在元素的值为i1时,将所述输入数据中第i1位的数值置换到第j1位,其中,i1为大于0且小于N的正整数,j1为值为i1的元素在第一置换数组中的位置;
其中,第一置换数组包括N个元素,各个元素均为大于0且小于N的正整数,且各个元素的大小均不相同;N为原始数据的位数。
优选地,所述执行第一非线性置换包括:
根据第一映射盒子对第一非线性置换的置换结果进行置换,包括:
通过基本位数为i3的第一映射盒子,对数位为i3的输入数据进行置换;其中,将输入数据的前j3位作为行数,将输入数据的后j4位作为列数,在第一映射盒子中通过上述行数和列数查找对应的数值,并将查找的结果作为上述本次第一加密操作的输出数据;其中,第一映射盒子的基本位数为i3,设置第一映射盒子的行数为2的j3次幂,第一映射盒子的列数为2的j4次幂,j3+j4=i3。
优选地,在所述将最后一次第一加密操作的输出数据作为原始数据对应的加密数据之后,还包括:
根据所述预定执行次数,重复执行第一解密操作;其中,将加密数据作为第一次第一解密操作的输入数据,将第i次执行第一解密操作的输出数据,作为执行第i+1次第一解密操作的输入数据;并将最后一次第一解密操作的输出数据作为加密数据对应的原始数据;其中,i为小于所述预定执行次数的正整数;
输出所述加密数据对应的原始数据。
优选地,所述执行第一解密操作包括:
对本次第一解密操作的输入数据执行第二非线性置换;其中,所述第二非线性置换为第一非线性置换的逆变换;
对第二非线性置换的置换结果执行第二线性置换,得到本次第一解密操作的输出数据;其中,所述第二线性置换为第一线性置换的逆变换。
优选地,所述执行第二线性置换包括:
根据第二置换数组的各个元素,对所述本次第二线性置换的输入数据中每一位数据进行置换,得到本次第二线性置换的置换结果,包括:
在元素的值为i1时,将所述输入数据中第i1位的数值置换到第j1位,其中,i1为大于0且小于N的正整数,j1为值为i1的元素在第二置换数组中的位置;
其中,第二置换数组包括N个元素,各个元素均为大于且0小于N的正整数,且各个元素的大小均不相同;N为原始数据对应的位数;其中,所述第二置换数组为第一置换数组对应的逆运算数组。
优选地,所述执行第二非线性置换包括:
根据第二映射盒子对第二非线性置换的置换结果进行置换,包括:
通过基本位数为i3的第二映射盒子,对数位为i3的输入数据进行置换;其中,将输入数据的前j3位作为行数,将输入数据的后j4位作为列数,在第二映射盒子中通过上述行数和列数查找对应的数值,并将查找的结果作为上述本次第一解密操作的输出数据;
其中,第二映射盒子的基本位数i3,设置第二映射盒子的行数为2的j3次幂,第二映射盒子的列数为2的j4次幂,j3+j4=i3;其中,所述第二映射盒子第一映射盒子对应的逆运算映射盒子。
为了达到上述目的,本发明还提出了一种数据变换装置,所述装置包括:
加密单元,用于对原始数据执行第一加密操作;所述执行第一加密操作包括:根据预定执行次数,重复执行所述第一加密操作;其中,将原始数据作为第一次第一加密操作的输入数据,将第i次执行第一加密操作的输出数据,作为执行第i+1次第一加密操作的输入数据;并将最后一次第一加密操作的输出数据作为原始数据对应的加密数据;其中,i为小于所述预定执行次数的正整数;
输出单元,用于输出所述原始数据对应的加密数据。
优选地,所述加密单元包括:
第一置换模块,用于对本次第一加密操作的输入数据执行第一线性置换;
第二置换模块,用于对第一线性置换的置换结果执行第一非线性置换,得到本次第一加密操作的输出数据。
优选地,所述第一置换模块执行第一线性置换包括:
根据第一置换数组的各个元素,对所述本次第一加密操作的输入数据中每一位数据进行置换,得到本次第一线性置换的置换结果,包括:
在元素的值为i1时,将所述输入数据中第i1位的数值置换到第j1位,其中,i1为大于0且小于N的正整数,j1为值为i1的元素在第一置换数组中的位置;
其中,第一置换数组包括N个元素,各个元素均为大于0且小于N的正整数,且各个元素的大小均不相同;N为原始数据的位数。
优选地,所述第二置换模块执行第一非线性置换包括:
根据第一映射盒子对第一非线性置换的置换结果进行置换,包括:
通过基本位数为i3的第一映射盒子,对数位为i3的输入数据进行置换;其中,将输入数据的前j3位作为行数,将输入数据的后j4位作为列数,在第一映射盒子中通过上述行数和列数查找对应的数值,并将查找的结果作为上述本次第一加密操作的输出数据;其中,第一映射盒子的基本位数为i3,设置第一映射盒子的行数为2的j3次幂,第一映射盒子的列数为2的j4次幂,j3+j4=i3。
优选地,所述装置还包括:
解密单元,用于对加密数据执行第一解密操作,所述执行第一解密操作包括:根据预定执行次数,重复执行所述第一解密操作;其中,将加密数据作为第一次第一解密操作的输入数据,将第i次执行第一解密操作的输出数据,作为执行第i+1次第一解密操作的输入数据;并将最后一次第一解密操作的输出数据作为加密数据对应的原始数据;其中,i为小于所述预定执行次数的正整数;
所述输出单元还用于输出所述加密数据对应的原始数据。
优选地,所述解密单元包括:
第二逆置换模块,用于对本次第一解密操作的输入数据执行第二非线性置换;其中,所述第二非线性置换为第一非线性置换的逆变换;
第一逆置换模块,用于对第二非线性置换的置换结果执行第二线性置换,得到本次第一解密操作的输出数据;其中,所述第二线性置换为第一线性置换的逆变换。
优选地,所述第一逆置换模块执行第二线性置换包括
根据第二置换数组的各个元素,对所述本次第二线性置换的输入数据中每一位数据进行置换,得到本次第二线性置换的置换结果,包括:
在元素的值为i1时,将所述输入数据中第i1位的数值置换到第j1位,其中,i1为大于0且小于N的正整数,j1为值为i1的元素在第二置换数组中的位置;
其中,第二置换数组包括N个元素,各个元素均为大于且0小于N的正整数,且各个元素的大小均不相同;N为原始数据对应的位数;其中,所述第二置换数组为第一置换数组对应的逆运算数组。
优选地,所述第二逆置换模块执行第二非线性置换包括:
根据第二映射盒子对第二非线性置换的置换结果进行置换,包括:
通过基本位数为i3的第二映射盒子,对数位为i3的输入数据进行置换;其中,将输入数据的前j3位作为行数,将输入数据的后j4位作为列数,在第二映射盒子中通过上述行数和列数查找对应的数值,并将查找的结果作为上述本次第一解密操作的输出数据;
其中,第二映射盒子的基本位数i3,设置第二映射盒子的行数为2的j3次幂,第二映射盒子的列数为2的j4次幂,j3+j4=i3;其中,所述第二映射盒子第一映射盒子对应的逆运算映射盒子。
与现有技术相比,本发明提供的技术方案包括:根据预定执行次数,重复执行第一加密操作;其中,将原始数据作为第一次第一加密操作的输入数据,将第i次执行第一加密操作的输出数据,作为执行第i+1次第一加密操作的输入数据;并将最后一次第一加密操作的输出数据作为原始数据对应的加密数据;其中,i为小于所述预定执行次数的正整数;输出所述原始数据对应的加密数据。通过本发明的方案,提供了一种加密运算方法,通过线性置换和非线性置换的结合,以及多次运算的设置,保证了加密算法的安全性,此外,可以对任意多位的数据进行加密和解密变换,因此,提供了一种可以对低于128位或者低于64位的数据进行加密变换的数据变换方法,并且,可以对低于128位或者低于64位的任意位数进行变换,不需要对不足的部分填充0,在实现UID的加密的情况下,保证密文UID的唯一性。
具体实施方式
为了便于本领域技术人员的理解,下面结合附图对本发明作进一步的描述,并不能用来限制本发明的保护范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的各种方式可以相互组合。
参见图1,本发明提出了一种数据变换方法,所述方法包括:
步骤110,对原始数据执行加密变换;
其中,所述对原始数据执行加密变换包括:根据预定执行次数,重复执行第一加密操作;其中,将原始数据作为第一次第一加密操作的输入数据,将第i次执行第一加密操作的输出数据,作为执行第i+1次第一加密操作的输入数据;并将最后一次第一加密操作的输出数据作为原始数据对应的加密数据;其中,i为小于所述预定执行次数的正整数;
步骤120,输出所述原始数据对应的加密数据。
本发明实施例中,第一加密操作包括至少一次线性置换和至少一次非线性置换,下面的示例中,以第一加密操作包括一次线性置换和一次非线性置换为例进行说明。线性置换通过一个一维数组对输入的数据进行置换,非线性置换通过一个二维数组对输入的数据进行置换,其中,一维数组的元素个数与原始数据的位数相同。
本发明实施例中,步骤110中,第一加密操作包括第一线性置换和第一非线性置换两个部分;
具体地,第一加密操作包括:
步骤210,对本次第一加密操作的输入数据执行第一线性置换;
步骤220,对第一线性置换的置换结果执行第一非线性置换;
步骤210中,在第一线性置换中,根据第一置换数组对第一线性置换的输入数据进行置换。第一置换数组由数字的位索引构成,第一置换数组包括N个元素,各个元素均为大于0小于N的正整数,且各个元素的大小均不相同。如果元素大小为i1,i1为大于0小于N的正整数,表示将本次变换的输入数据中第i1位的数值置换到第j1位,其中,其中,j1为元素在第一置换数组中的位置。其中,N为原始数据对应的位数。
例如,一个示例性的第一置换数组如下所示:
[16,7,20,21,17,12,1,15,
23,5,18,0,10,2,8,24,
14,3,9,22,13,6,25,11,
4,19]
根据上述第一置换数组,第1个元素的大小为16,表示输入数据的第16位变成置换结果的第1位,第2个元素的大小为7,表示输入数据的第7位变成置换结果的第2位,根据第一置换数组各个元素指示的位索引,分别获取置换结果中的各个数位的数值,从而得到本次第一线性置换的置换结果。
步骤220中,所述第一非线性置换包括:根据第一映射盒子(S盒)对第一非线性置换的置换结果进行置换。第一映射盒子包括,
设置第一映射盒子的基本位数i3,设置第一映射盒子的行数为2的j3次幂,第一映射盒子的列数为2的j4次幂,j3+j4=i3,通过基本位数为i3的第一映射盒子,可以对数位为i3的输入数据进行置换,例如,i3为5时,可以同时对5为数据进行置换。
对于i3位的输入数据,将输入数据的前j3位作为行数,将输入数据的后j4位作为列数,在第一映射盒子中通过上述行数和列数查找对应的数值,并将查找的结果作为上述i3位输入数据对应的输出数据;
以i3位数据为单位,对第一非线性置换的输入数据依次通过第一映射盒子执行对应的变换,对于不足i3位的数据,保持不变,通过上述方法,得到第一非线性置换之后的输出数据。
如图3所示,为对原始数据执行第一加密操作的示意图,例如,第一非线性置换的输入数据为26位数据,i3为5,则第一非线性置换通过5次5进5出(输入长度为5位,输出长度也为5位)的S盒变换来实现,可以将26位中的第1位保持不变,其他25位为S盒变换后的结果,也可以将26位中的第26位保持不变,其他25位为S盒变换后的结果。
下面结合一个具体的示例进行说明。
例如,一个示例性的第一映射盒子如下所示,其中,i3设置为5,
以输入数据25为例,对应的二进制表示为11001,以其中的前三位作为行号,也后两位作为列号,从S盒中可以查询得到输出结果为10。输入数据的第1位,再连接5个S盒的输出结果,就构成了非线性置换的输出数据。
本发明实施例中,步骤120中,预定执行次数可以设置为10,也就是说,对原始数据执行10次第一加密操作,从而得到原始数据对应的加密数据。
具体地,整个加密流程由10轮运算完成,每一轮运算包含一次第一线性置换和一次第一非线性置换。加密流程示例性的伪代码如下:
参见图4,本发明还提出了一种数据变换方法,在图1所示的数据变换方法的基础上,所述方法包括:
步骤130,对加密数据执行解密变换;
所述对加密数据执行解密变换括:根据预定执行次数,重复执行第一解密操作;
其中,将加密数据作为第一次第一解密操作的输入数据,将第i次执行第一解密操作的输出数据,作为执行第i+1次第一解密操作的输入数据;并将最后一次第一解密操作的输出数据作为加密数据对应的原始数据;其中,i为小于所述预定执行次数的正整数;
步骤140,输出所述加密数据对应的原始数据。
本发明实施例中,第一解密操作包括至少一次线性置换和至少一次非线性置换,下面的示例中,以第一加密操作包括一次线性置换和一次非线性置换为例进行说明。
本发明实施例中,第一解密操作包括第二线性置换和第二非线性置换两个部分;
具体地,第一解密操作包括:
步骤310,对第二线性置换的置换结果执行第二非线性置换;
步骤320,对本次第一解密操作的输入数据执行第二线性置换;
步骤310中,所述第二非线性置换包括:根据第二映射盒子(S盒)对第二非线性置换的输入数据进行置换。第二映射盒子包括,
设置第二映射盒子的基本位数i3,设置行数为2的j3次幂,列数为2的j4次幂,j3+j4=i3,通过基本位数为i3的第二映射盒子,可以对数位为i3的数据进行置换,例如,i3为5时,可以同时对5为数据进行置换。
对于i3位的输入数据,将输入数据的前j3位作为行数,将输入数据的后j4位作为列数,在第二映射盒子中通过上述行数和列数查找对应的数值,并将查找的结果作为上述i3位输入数据对应的输出数据;
以i3位数据为单位,对第二非线性置换的输入数据依次通过第二映射盒子执行对应的变换,对于不足i3位的数据,保持不变,通过上述方法,得到第二非线性置换之后的输出数据。
例如,第二非线性置换的输入数据为26位数据,i3为5,则第二非线性置换通过5次5进5出(输入长度为5位,输出长度也为5位)的S盒变换来实现,可以将26位中的第1位保持不变,其他25位为S盒变换后的结果,也可以将26位中的第26位保持不变,其他25位为S盒变换后的结果。
下面结合一个具体的示例进行说明。
例如,一个示例性的第二映射盒子如下所示,其中,i3设置为5,
以输入数据25为例,对应的二进制表示为11001,以其中的前三位作为行号,也后两位作为列号,从S盒中可以查询得到输出结果为10。输入数据的第1位,再连接5个S盒的输出结果,就构成了非线性置换的输出数据。
步骤320中,在第二线性置换中,根据第二置换数组对第二线性置换的输入数据进行置换。第二置换数组由数字的位索引构成,第二置换数组包括N个元素,各个元素均为大于0小于N的正整数,且各个元素的大小均不相同。如果元素大小为i1,i1为大于0小于N的正整数,表示将本次变换的输入数据中第i1位的数值置换到第j1位,其中,其中,j1为元素在第二置换数组中的位置。
例如,一个示例性的第二置换数组如下所示:
[11,6,13,17,24,9,21,1,
14,18,,12,23,5,20,16,7,
0,4,10,25,2,3,19,8,
15,22]
根据上述第二置换数组,第1个元素的大小为11,表示输入数据的第11位变成置换结果的第1位,第2个元素的大小为6,表示输入数据的第6位变成置换结果的第2位,根据第二置换数组各个元素指示的位索引,分别获取置换结果中的各个数位的数值,从而得到本次第二线性置换的置换结果。
本发明实施例中,第二置换数组为第一置换数组的逆运算数组。下面结合具体的示例进行说明。
第一置换数组为{k[0],k[1],…,k[N]};
第一置换数组对应的第二置换数组为{ik[0],ik[1],…,ik[N]};
其中,第二置换数组第i个元素ik[i]的大小为j,其中j为k[j]为i的元素在第一置换数组中的位置;
也就是说
如果k[j]=i;那么ik[i]=j;
根据上述对应关系,可以根据第一置换数组中各个元素的数值,得到第二置换数组中各个元素的数值。
例如,一组原始数据为{a0,a1,…,aN};
通过第一置换数组对上述原始数据进行第一线性置换,得到变换后的数据为{ak0,ak1,…,akN};
通过第二置换数组对上述变换后的数据进行第一线性置换,得到变换后的数据为{a0,a1,…,aN}。
下面再给出一个具体的例子,例如,第一置换数组为{3,1,0,2}。一组原始数据{a0,a1,a2,a3}经过线性变换后,该四位数变成{a3,a1,a0,a2};第一置换数组对应的第二置换数组为{2,1,3,0},通过第一置换数组,{a3,a1,a0,a2}被置换为{a0,a1,a2,a3}。
本发明实施例中,第二映射盒子为第一映射盒子的逆运算数组。下面结合具体的示例进行说明。第一映射盒子和第二映射盒子实质为二维数组;
第一映射盒子为:
第一映射盒子的置换关系是0->2,1->3,2->1,3->0;即第一映射盒子的输入为0时,输出为2;输入为1时,输出为3,等等。
对应的,第二映射盒子需要具有置换关系为:2->0,3->1,1->2,0->3;即第一映射盒子的输入为2时,输出为0;输入为3时,输出为1,等等。
通过上述第二映射盒子需要具有的置换关系,可以得到第二映射盒子为:
本发明实施例中,步骤140中,预定执行次数可以设置为10,也就是说,对加密数据执行10次第一解密操作,其中每一次的输出数据作为下一次第一解密操作的输入数据,从而得到加密数据对应的原始数据。
基于与上述实施例相同或相似的构思,本发明实施例还提供一种数据变换装置,参见图5,本发明提出的一种数据变换装置包括:
加密单元10,用于对原始数据执行第一加密操作;所述执行第一加密操作包括:根据预定执行次数,重复执行所述第一加密操作;其中,将原始数据作为第一次第一加密操作的输入数据,将第i次执行第一加密操作的输出数据,作为执行第i+1次第一加密操作的输入数据;并将最后一次第一加密操作的输出数据作为原始数据对应的加密数据;其中,i为小于所述预定执行次数的正整数;
输出单元20,用于输出所述原始数据对应的加密数据。
本发明实施例中,所述加密单元10包括:
第一置换模块11,用于对本次第一加密操作的输入数据执行第一线性置换;
第二置换模块12,用于对第一线性置换的置换结果执行第一非线性置换,得到本次第一加密操作的输出数据。
本发明实施例中,所述第一置换模块11执行第一线性置换包括:
根据第一置换数组的各个元素,对所述本次第一加密操作的输入数据中每一位数据进行置换,得到本次第一线性置换的置换结果,包括:
在元素的值为i1时,将所述输入数据中第i1位的数值置换到第j1位,其中,i1为大于0且小于N的正整数,j1为值为i1的元素在第一置换数组中的位置;
其中,第一置换数组包括N个元素,各个元素均为大于0且小于N的正整数,且各个元素的大小均不相同;N为原始数据的位数。
本发明实施例中,所述第二置换模块12执行第一非线性置换包括:
根据第一映射盒子对第一非线性置换的置换结果进行置换,包括:
通过基本位数为i3的第一映射盒子,对数位为i3的输入数据进行置换;其中,将输入数据的前j3位作为行数,将输入数据的后j4位作为列数,在第一映射盒子中通过上述行数和列数查找对应的数值,并将查找的结果作为上述本次第一加密操作的输出数据;其中,第一映射盒子的基本位数为i3,设置第一映射盒子的行数为2的j3次幂,第一映射盒子的列数为2的j4次幂,j3+j4=i3。
本发明实施例中,所述装置还包括:
解密单元30,用于对加密数据执行第一解密操作,所述执行第一解密操作包括:根据预定执行次数,重复执行所述第一解密操作;其中,将加密数据作为第一次第一解密操作的输入数据,将第i次执行第一解密操作的输出数据,作为执行第i+1次第一解密操作的输入数据;并将最后一次第一解密操作的输出数据作为加密数据对应的原始数据;其中,i为小于所述预定执行次数的正整数;
所述输出单元20还用于输出所述加密数据对应的原始数据。
本发明实施例中,所述解密单元30包括:
第二逆置换模块32,用于对本次第一解密操作的输入数据执行第二非线性置换;其中,所述第二非线性置换为第一非线性置换的逆变换;
第一逆置换模块31,用于对第二非线性置换的置换结果执行第二线性置换,得到本次第一解密操作的输出数据;其中,所述第二线性置换为第一线性置换的逆变换。
本发明实施例中,所述第一逆置换模块31执行第二线性置换包括
根据第二置换数组的各个元素,对所述本次第二线性置换的输入数据中每一位数据进行置换,得到本次第二线性置换的置换结果,包括:
在元素的值为i1时,将所述输入数据中第i1位的数值置换到第j1位,其中,i1为大于0且小于N的正整数,j1为值为i1的元素在第二置换数组中的位置;
其中,第二置换数组包括N个元素,各个元素均为大于且0小于N的正整数,且各个元素的大小均不相同;N为原始数据对应的位数;其中,所述第二置换数组为第一置换数组对应的逆运算数组。
本发明实施例中,所述第二逆置换模块32执行第二非线性置换包括:
根据第二映射盒子对第二非线性置换的置换结果进行置换,包括:
通过基本位数为i3的第二映射盒子,对数位为i3的输入数据进行置换;其中,将输入数据的前j3位作为行数,将输入数据的后j4位作为列数,在第二映射盒子中通过上述行数和列数查找对应的数值,并将查找的结果作为上述本次第一解密操作的输出数据;
其中,第二映射盒子的基本位数i3,设置第二映射盒子的行数为2的j3次幂,第二映射盒子的列数为2的j4次幂,j3+j4=i3;其中,所述第二映射盒子第一映射盒子对应的逆运算映射盒子。
需要说明的是,以上所述的实施例仅是为了便于本领域的技术人员理解而已,并不用于限制本发明的保护范围,在不脱离本发明的发明构思的前提下,本领域技术人员对本发明所做出的任何显而易见的替换和改进等均在本发明的保护范围之内。