发明内容
本发明提供一种新型文件存储加密方法及系统,以实现提高存储在服务器上大数据的安全性。
本发明一种文件存储加密方法,包括:
S100将所述待存储的文件原文通过数据流的形式转换成二进制原文数据;
S200将所述二进制原文数据按照预设位数H由前向后进行分组,最后一组二进制原文数据的位数小于或等于H;
S300获取分组后位数为H的二进制原文数据组的组数N;
S400根据位数H及所述组数N确定加密参数C;
S500根据所述加密参数C,将所述二进制原文数据组进行加密,获得对应的二进制密文数据组;
S600将所有的二进制密文数据组按顺序进行组合,形成二进制密文数据,并将所述二进制密文数据转换为文件密文进行存储。
上述步骤S200是指将所述二进制原文数据沿着数据排列方向按照预设位数H依次进行分组,如果该二进制原文数据不能被分成整数个H位的二进制原文数据组,末尾小于H位的剩余数据作为尾数,单独一组,位于最后。
上述步骤S400中,加密参数的确定是由预设位数、分组后位数为预设位数的二进制原文数据组的组数共同来确定的。也就是说步骤S400中的所述组数是指步骤S300中获取的组数。
进一步地,所述步骤S500包括:
S510根据所述加密参数C,从对应的二进制原文数据组开始,由前向后将相邻C组的二进制原文数据依次进行同或位或者异或位运算获得前面N-C+1组中每组的二进制密文数据;余下每组的二进制密文数据与对应组的二进制原文数据一致;
S520将获得的所有二进制密文数据组按顺序组合,形成二进制密文数据;
S530将所述二进制密文数据转换成文件密文进行存储。
“同或”是一个数学运算符,应用于逻辑运算。同或的数学符号为⊙,其运算法则为a⊙b=ab+a'b'(a'为非a,b'为非b);就是说两个值相同,则同或结果为真。反之,为假。——简称同真,异假。即,同或:相同为1,不同为0。
“异或”是一个数学运算符。它应用于逻辑运算。异或的数学符号为其运算法则为:如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
进一步地,所述步骤S400中,所述加密参数C为加密过程中需要参与运算相邻二进制数据组的组数;所述加密参数C=N%H+2,当N%H=H-1时,约定C=H。
进一步地,所述步骤S510包括:
S511当所述加密参数为奇数时,从对应的二进制原文数据组开始,由前向后将相邻C组的二进制原文依次进行异或位运算获得前面N-C+1组中每组的二进制密文;余下每组的二进制密文即为对应的二进制原文数据组;
S512当所述加密参数为偶数时,从对应的二进制原文数据组开始,由前向后将相邻C组的二进制原文依次进行同或位运算获得前面N-C+1组中每组的二进制密文;余下每组的二进制密文即为对应的二进制原文数据组。
进一步地,所述位数H的取值为8、16、32、或64之中任意一个。
另一方面,本发明还提供了一种文件存储加密系统,包括:转换模块,用于将所述待存储的文件原文通过数据流的形式转换成二进制原文数据;将组合后的二进制密文数据转换为文件密文;分组模块,用于将所述二进制原文数据按照预设位数H由前向后进行分组,最后一组二进制原文数据的位数小于或等于H;参数获取模块,用于获取分组后位数为H的二进制原文数据组的组数N;并根据位数H及所述组数N确定加密参数C;加密模块,用于根据所述加密参数C,将所述二进制原文数据组进行加密,获得对应的二进制密文数据组;组合模块,用于将所有二进制密文数据组按顺序进行组合,形成二进制密文数据。
进一步地,所述加密模块包括运算子模块;所述运算子模块根据所述加密参数C,从对应的二进制原文数据组开始,由前向后将相邻C组的二进制原文数据依次进行同或位或者异或位运算获得前面N-C+1组中每组的二进制密文数据;余下每组的二进制密文数据与对应组的二进制原文数据一致。
进一步地,所述加密参数C为加密过程中需要参与运算相邻二进制数据组的组数;所述加密参数C=N%H+2,当N%H=H-1时,约定C=H。
进一步地,所述加密模块还包括判断子模块;当所述判断子模块判断所述加密参数为奇数时,所述运算子模块在所述判断子模块的控制下,从对应的二进制原文数据组开始,由前向后将相邻C组的二进制原文依次进行异或位运算获得前面N-C+1组中每组的二进制密文;余下每组的二进制密文即为对应的二进制原文数据组;当所述判断子模块判断所述加密参数为偶数时,所述运算子模块在所述判断子模块的控制下,从对应的二进制原文数据组开始,由前向后将相邻C组的二进制原文依次进行同或位运算获得前面N-C+1组中每组的二进制密文;余下每组的二进制密文即为对应的二进制原文数据组。
进一步地,所述位数H的取值为8、16、32、或64之中任意一个。
本发明所提供的一种文件存储加密方法及系统,通过数据转换、数据分组、数据加密及转换后进行文件密文存储。由于加密过程中的使用的加密参数是跟随用户选取的位数和组数而定的,并不是固定不变的,也就是使得后面的加密过程也是不一样的,另外加密可以根据实际需求采用同或或者异或的方式进行加密,使得最后得到的新的二进制数据安全性很高,达到了更加安全的可逆加密操作,提高了数据的安全性。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明公开了一种文件存储加密方法,实施例一如图1所示,包括:
S100将所述待存储的文件原文通过数据流的形式转换成二进制原文数据;
S200将所述二进制原文数据按照预设位数H由前向后进行分组,最后一组二进制原文数据的位数小于或等于H;
S300获取分组后位数为H的二进制原文数据组的组数N;
S400根据位数H及所述组数N确定加密参数C;
S500根据所述加密参数C,将所述二进制原文数据组进行加密,获得对应的二进制密文数据组;
S600将所有的二进制密文数据组按顺序进行组合,形成二进制密文数据,并将所述二进制密文数据转换为文件密文进行存储。
较佳的,上述位数H的取值为8、16、32、或64之中任意一个。
该实施例中,将文件转换为二进制数据,对二进制数据进行分组,每组H位,如果转换后的二进制原文数据不能分成整数个H位的二进制数,分组后得到N组H位二进制数和一个尾数,这个尾数是最后一组不够H位的二进制数。根据位数H和组数N获得一个加密参数,然后根据这个加密参数,对二进制原文数据组加密获得二进制密文数据组,最后得到新的二进制密文数据组,最后存储的时候还要将二进制密文转换为文件密文来存储,通过这样的方式的话数据安全性很高。
上述实施例1中的步骤S500包括:
S510根据所述加密参数C,从对应的二进制原文数据组开始,由前向后将相邻C组的二进制原文数据依次进行同或位或者异或位运算获得前面N-C+1组中每组的二进制密文数据;余下每组的二进制密文数据与对应组的二进制原文数据一致;
S520将获得的所有二进制密文数据组按顺序组合,形成二进制密文数据;
S530将所述二进制密文数据转换成文件密文进行存储。
较佳的,所述加密参数C为加密过程中需要参与运算相邻二进制数据组的组数;所述加密参数C=N%H+2,当N%H=H-1时,约定C=H。
比如将原始的二进制数据每8位分一组,共分了25组,其中前24组都是8位,最后一组3位,那么这里的整数个8位二进制数组N为24,H为8,那么C=24%8+2=2。那么,需要参与运算相邻二进制数据组的组数就是2组,那么就是说,每组的二进制数据密文为:从对应的二进制原文数据组开始,由前向后将相邻的2组二进制原文进行同或位或者异或位运算来加密。由此,我们可以算出前面23组的二进制密文数据,第24组和最后一组尾数的二进制密文数据则采用原来的二进制原文数据本身,不做运算和变化。其中第24组我们可以作为参考基准,便于以后解密时使用,根据C的值,按照从后往前的顺序,除去尾数组外,1至C-1组均为参考基准二进制原文,参考基准二进制原文对应的密文也是其原文本身。此外,由于当组数N除以每组位数H余数为H-1,对应的加密参数C为H+1,该值大于每组位数,为了更方便进行后续的运算,规定此时C=H。
下面,我们举个简单的例子,本发明的实施例二,比如待存储的数据原文为“fdc?bEKJ!”,我们通过oi数据流的形式转换为二进制原文数据如下:
然后,我们将上述的二进制原文数据按照每组8位进行分组:
由上可以看出,按照每组8位进行分组,正好分成了10组,根据位数和完整的组数可计算出加密参数C,C=10%8+2=4;获得加密参数C的值后,我们再来进行加密运算,假设是采用同或进行运算,上述10组二进制原文分别为A1、A2、A3......A10,加密后的10组二进制密文分别为E1、E2、E3......E10,由前向后将相邻4组的8位二进制原文数据进行同或位运算,即En=An⊙An+1⊙An+2⊙An+3(n≤7),E8=A8,E9=A9,E10=A10。E8、E9、E10为对应的参考基准二进制原文,后续用户解密的话,只要知道加密参数,便可推导出哪些是基准二进制原文,进而解密。二进制密文如下:
将上述二进制密文数据组按顺序组合连接后如下:
111110100110010010000011011000101010010111010110111100000100101
10100101000100001
再将上述二进制密文数据转化为文件密文再进行存储。
本发明的实施例三,如图2所示,包括:
S101将所述待存储的文件原文通过数据流的形式转换成二进制原文数据;
S102将所述二进制原文数据按照预设位数H由前向后进行分组,最后一组二进制原文数据的位数小于或等于H;
S103获取分组后位数为H的二进制原文数据组的组数N;
S104根据位数H及所述组数N确定加密参数C;
S105判断所述加密参数是奇数还是偶数,若是奇数,则进入步骤S106,若是偶数进入S107;
S106采用异或位运算方式,从对应的二进制原文数据组开始,由前向后将相邻C组的二进制原文依次进行异或位运算获得前面N-C+1组中每组的二进制密文;余下每组的二进制密文即为对应的二进制原文数据组;
S107采用同或位运算方式,从对应的二进制原文数据组开始,由前向后将相邻C组的二进制原文依次进行同或位运算获得前面N-C+1组中每组的二进制密文;余下每组的二进制密文即为对应的二进制原文数据组;
S108将获得的所有二进制密文数据组按顺序组合,形成二进制密文数据;
S109将所述二进制密文数据转换成文件密文进行存储;
S110将所有的二进制密文数据组按顺序进行组合,形成二进制密文数据,并将所述二进制密文数据转换为文件密文进行存储。
上述实施例,通过加密参数C的奇偶性来选择运算方式,如此,增加了数据的安全性,也更难破解了。而且存储时存储的是文件密文,一般很难看出是已经加密过的数据。因此,安全性也更高。
本发明的实施例四,加密示意图如图3所示,通过数据转换、数据分组、数据加密及存储等过程完成文件存储加密。本实施例采用异或的运算方式。具体如下:
(1)数据转换
将需要存储文件原文Tot通过数据流转换成二进制,记做Bot。
(2)数据分组
将二进制原文Bot按照H(H=8、16、32或64,H可以根据用户需求进行取值)位进行分组,组数记做N,分别记做B1、B2、B3、…、BN,分组剩下的二进制数据记做Bend。
加密参数记做C,其值为C=N%H+2(特别地,当N%H=H-1时候,约定C=H)。加密参数C用于确定加密过程中需要参与异或运算相邻二进制组数。由于当组数N除以每组位数H余数为H-1,对应的加密参数C为H+1,该值大于每组位数,为了更方便进行广义斐波那契算法异或运算,规定此时C=H。例如,H=8、N=63时,则N%N=7=8-1,按照规定,此时C=8,即加密过程中,使用相邻8组二进制原文依次进行异或运算。
上述分组中,用于做参考基准二进制为BN-C+2、BN-C+3、…、BN。经过广义斐波那契算法,得到的密文组数为N-C+1,剩下C-1组密文(不包括尾数)就等于对应的参考基准二进制原文。
(3)数据加密
对H位二进制原文Bot进行加密,得到对应的H位二进制密文Ect={E1、E2、E3、…、EN、Eend}。具体规则是:由前向后,相邻C个组H位二进制数据进行异或运算,即EN-C+2=BN-C+2、EN-C+3=BN-C+3、…、EN=BN、Eend=Bend。也就是所,对于前N-C+1组密文而言,获取方式是将相邻C组的H位二进制原文依次进行异或运算;而对于剩下C-1组密文就等于对应的参考基准二进制原文;最后如果有尾数,则密文尾数与原文尾数相同。
所谓异或运算,就是数据对应位不同为0,相同为1。
(4)数据存储
把加密后的二进制密文Ect转化为文件Tet重新存储,就完成了数据存储加密过程。
来个简单的例子,加密图解过程如图4所示,首先获取数据原文Tot,数据原文Tot为x?k&e|~2#;然后加密过程如下:
1.1数据转换,将原文Tot转换为二进制原文数据;
1.2数据分组
将二进制原文Bot按照8位(H=8)进行分组,组数N=9,分别记做B1、B2、B3、…、B9,分组剩下的二进制数据Bend为空,即Bend=NULL。此时广义斐波那契参数C=3,对应的参考基准二进制原文为B8、B9。二进制原文Bot如下。
01111000 00111111 01101011
00100110 01100101 01111100
01111110 00110010 00100011
1.3数据加密
加密后的8位二进制密文Ect={E1、E2、E3、…、E9、Eend}。具体规则是:由前向后,相邻3个组8位二进制数据进行异或运算,即 E8=B8、E9=B9、Eend=Bend=NULL。二进制密文Ect如下:
00101100 01110010 00101000
00111111 01100111 00110000
01101111 00110010 00100011
1.4数据存储
将二进制密文Ect转化为文件Tet重新存储,加密后的文件Te为:,r(?g0o2#
另一方面,本发明还提供了一种文件存储加密系统,本发明实施例五如图5所示,包括:转换模块10,用于将所述待存储的文件原文通过数据流的形式转换成二进制原文数据;将组合后的二进制密文数据转换为文件密文;分组模块20,用于将所述二进制原文数据按照预设位数H由前向后进行分组,最后一组二进制原文数据的位数小于或等于H;参数获取模块30,用于获取分组后位数为H的二进制原文数据组的组数N;并根据位数H及所述组数N确定加密参数C;加密模块40,用于根据所述加密参数C,将所述二进制原文数据组进行加密,获得对应的二进制密文数据组;组合模块,用于将所有二进制密文数据组按顺序进行组合,形成二进制密文数据。
在上述实施例的基础上,本发明的实施例六如图6所示,在上述实施例五的基础上,所述加密模块40包括运算子模块41;所述运算子模块41根据所述加密参数C,从对应的二进制原文数据组开始,由前向后将相邻C组的二进制原文数据依次进行同或位或者异或位运算获得前面N-C+1组中每组的二进制密文数据;余下每组的二进制密文数据与对应组的二进制原文数据一致。
较佳的,所述加密参数C为加密过程中需要参与运算相邻二进制数据组的组数;所述加密参数C=N%H+2,当N%H=H-1时,约定C=H。
可见,该系统对文件存储过程,将需要存储文件原文Tot通过数据流转换成二进制,记做Bot。然后将二进制原文Bot按照H(H=8、16、32或64,H可以根据用户需求进行取值)位进行分组,其中H位的二进制数据组的组数记做N,分别记做B1、B2、B3、…、BN,分组剩下的二进制数据记做Bend。加密参数记做C,其值为C=N%H+2(特别地,当G%H=H-1时候,约定C=H),上述分组中,用于做参考基准二进制为BN-C+2、BN-C+3、…、BN。然后对H位二进制原文Bot进行加密,得到对应的H位二进制密文Ect={E1、E2、E3、…、EN、Eend}。具体规则是:由前向后,相邻C个组H位二进制数据进行同或或者异或运算(根据设定的运算方式),比如采用异或运算,即 EN-C+2=BN-C+2、EN-C+3=BN-C+3、…、EN=BN、Eend=Bend。最后把加密后的二进制密文Ect转化为文件Tet重新存储。
较佳的,如图6所示,所述加密模块40还包括判断子模块42;当所述判断子模块42判断所述加密参数为奇数时,所述运算子模块41在所述判断子模块42的控制下,从对应的二进制原文数据组开始,由前向后将相邻C组的二进制原文依次进行同或位运算获得前面N-C+1组中每组的二进制密文;余下每组的二进制密文即为对应的二进制原文数据组;当所述判断子模块42判断所述加密参数为偶数时,所述运算子模块41在所述判断子模块42的控制下,从对应的二进制原文数据组开始,由前向后将相邻C组的二进制原文依次进行异或位运算获得前面N-C+1组中每组的二进制密文;余下每组的二进制密文即为对应的二进制原文数据组。
上述任一实施例中,所述位数H的取值为8、16、32、或64之中任意一个。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。