文件处理方法、计算机可读存储介质及电子设备与流程

文档序号:32481799发布日期:2022-12-09 23:08阅读:34来源:国知局
文件处理方法、计算机可读存储介质及电子设备与流程

1.本技术涉及人工智能(ai)技术领域,特别是涉及ai模型文件处理技术领域。


背景技术:

2.在ai领域,当完成ai模型的构建和训练之后,就可以部署和发布。如果没有对ai模型进行保护,那么任何获取到该模型的第三方就可以通过模型可视化工具(如netron)等对模型进行分析,甚至可以直接运行和使用该模型。为了保护自己的ai算法模型不被未授权的第三方利用,现有技术通过采用加密算法对整个ai模型进行加密,然后部署和发布,最后在模型推理前进行解密,获取原始模型进行推理。但是,如果对整个ai模型进行加密,那么当ai模型比较大时,加解密计算量大,特别是端设备,计算能力受限,不利于ai模型在端设备的部署和落地。


技术实现要素:

3.鉴于以上所述现有技术的问题,本技术的目的在于提供文件处理方法、计算机可读存储介质及电子设备,用于解决现有技术中对文件保护时对整个文件进行加密带来的加解密计算量大的技术问题。
4.为实现上述目的及其他相关目的,本技术提供一种文件处理方法。该方法包括:针对源文件创建空的第一保护文件;构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则,对所述文件头部结构进行加密,并且基于加密后的所述文件头部结构和所述第一保护文件来形成第二保护文件;以及根据所述文件头部结构对所述源文件进行处理,并且基于处理后的所述源文件和所述第二保护文件来形成第三保护文件。
5.于本技术的一实施例中,所述处理规则包括随机破坏规则,并且根据所述文件头部结构对所述源文件进行处理包括:根据所述随机破坏规则对所述源文件进行随机破坏。
6.于本技术的一实施例中,所述基于加密后的所述文件头部结构和所述第一保护文件来形成第二保护文件包括:将加密后的所述文件头部结构写入所述第一保护文件的头部,以形成所述第二保护文件。
7.于本技术的一实施例中,基于处理后的所述源文件和所述第二保护文件来形成第三保护文件包括:将处理后的所述源文件写入所述第二保护文件的尾部,以形成所述第三保护文件。
8.于本技术的一实施例中,该方法还包括:获取所述源文件,所述源文件包括人工智能源模型文件。
9.于本技术的一实施例中,该方法还包括:基于所述第三保护文件执行发布和部署。
10.为实现上述目的及其他相关目的,本技术还提供一种文件处理方法。该方法包括:接收受保护文件,所述受保护文件包括与经加密的文件头部结构相关联的第一信息和与根据所述文件头部结构对源文件进行处理而得到的经处理的源文件相关联的第二信息,所述文件头部结构包括将要对所述源文件执行的处理规则;基于预设的文件头部结构对所述受
保护文件的所述第一信息进行校验;以及响应于所述受保护文件的所述第一信息通过校验,基于所述受保护文件的所述第二信息得出所述源文件。
11.于本技术的一实施例中,所述处理规则包括随机破坏规则,所述经处理的源文件包括根据所述随机破坏规则对所述源文件进行随机破坏后的源文件。
12.于本技术的一实施例中,基于预设的文件头部结构对所述受保护文件的所述第一信息进行校验包括:从所述受保护文件的头部得出所述经加密的文件头部结构;使用预设的对称加密算法和密钥对所述经加密的文件头部结构进行解密;以及基于预设的文件头部结构对经解密的文件头部结构进行校验。
13.于本技术的一实施例中,基于所述受保护文件的所述第二信息得出所述源文件包括:从所述受保护文件的尾部得出所述经处理的源文件;以及根据所述文件头部结构从所述经处理的源文件解码出所述源文件,并将所述源文件存储到目标缓冲区。
14.为实现上述目的及其他相关目的,本技术还提供一种计算机可读存储介质,其上存储有计算机可读程序指令,所述程序指令被执行时实现所述的文件处理方法。
15.为实现上述目的及其他相关目的,本技术还提供一种电子设备,包括:存储器,被配置为存储程序指令;以及处理器,被配置为运行所述程序指令以实现所述的文件处理方法。
16.如上所述,根据本公开实施例,不是对整个源文件(例如ai模型)进行加密,而是通过构建的文件头部结构对源文件进行随机破坏,并将随机破坏规则加密后写入源文件头部,由于对源文件进行随机破坏,因此针对同一个源文件,每次破坏的内容都不一样,从而破坏后的保护文件也不一样,从而最大限度的提高源文件保护的机密性和安全性。同时由于不对整个源文件进行加密,在实现对源文件进行保护的同时降低了对计算资源的需求,特别是对部署于计算资源受限的端设备来说,提高了源文件在推理前解保护的速度。本技术的方法适用于对ai模型、各应用文档进行保护,对软硬件环境和场景不做限制,通用性强。
附图说明
17.图1显示为本技术一实施例的文件处理方法的一种流程图;
18.图2显示为本技术一实施例的文件处理方法的另一种流程图;
19.图3显示为本技术一实施例的文件处理方法中对受保护文件的第一信息进行校验流程图;
20.图4显示为本技术一实施例的文件处理方法中基于受保护文件的第二信息得出源文件流程图;
21.图5显示为本技术一实施例的文件处理方法的应用实例流程图;
22.图6显示为本技术一实施例的电子设备的原理结构示意图。
具体实施方式
23.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离
本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
24.在已有技术中,对整个ai模型进行加密,然后部署和发布,最后在模型推理前进行解密,以获取原始模型进行推理。然而,如果对整个ai模型进行加密,加解密计算量可能很大,不利于ai模型在端设备的部署和落地。
25.为了解决至少上述问题,本公开提供一种文件处理方法,其无需对整个源文件进行加密,而是通过构建文件头部结构,根据文件头部结构对源文件进行随机处理或破坏,并将随机处理或破坏规则加密后写入源文件头部。以此方式,能够解决在对文件保护时对整个文件进行加密带来的加解密计算量大的技术问题。
26.下文中,将参考附图通过示例性实施例描述本公开的具体实施方案。
27.图1是示出根据本公开实施例的文件处理方法的流程图。如图1所示,该文件处理方法包括以下步骤s110至步骤s140。
28.在步骤s110,针对源文件创建空的第一保护文件。在一些实施例中,该源文件为ai模型文件。在一些实施例中,空的保护文件的后缀名与源文件的后缀名相同。例如,创建空的ai保护模型文件,如protected_model.pb,并且后缀名需与ai源文件保持一致,如.pb或.onnx。
29.此外,在一些实施例中,还可以确定源文件的大小,例如确定ai源文件的大小,为后续步骤s120至步骤s140的实施做准备。
30.在步骤s120,构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则。在一些本实施例中,所述处理规则包括随机破坏规则。稍后详细描述随机破坏规则。
31.在步骤s130,对所述文件头部结构进行加密,并且基于加密后的所述文件头部结构和所述第一保护文件来形成第二保护文件。在一些实施例中,基于加密后的所述文件头部结构和所述第一保护文件来形成第二保护文件包括:将加密后的所述文件头部结构写入所述第一保护文件的头部,以形成所述第二保护文件。
32.在一些实施例中,形成第二保护文件可以采用以下两种方式的任一种。
33.作为第一种方式,采用加密算法对构建的文件头部结构进行加密;判断加密后的文件头部结构的大小是否与加密前文件头部结构的大小相等,若是,则将加密后的模件头部结构写入所述空的保护文件的头部,若否,则构建一个预设大小的辅助头部,然后将所述辅助头部写入所述空的保护文件的头部,并将加密后的文件头部结构写入所述空的保护文件的当前尾部,其中,所述辅助头部包括预设的魔幻数和加密后的文件头部结构的大小。
34.作为第二种方式,采用加密算法对构建的基础头部进行加密;在加密后的基础头部的大小与加密前的基础头部相等,且加密后的叠加操作单元列表的大小与加密前的叠加操作单元列表的大小相等时,将加密后的基础头部写入所述空的保护文件的头部,同时将加密后的叠加操作单元列表写入所述空的保护文件的当前尾部;在加密后的基础头部的大小与加密前的基础头部不相等,或者加密后的叠加操作单元列表的大小与加密前的叠加操作单元列表的大小相等时,构建一个预设大小的辅助头部,然后将所述辅助头部写入所述空的保护文件的头部,并将加密后的基础头部写入所述空的保护文件的当前尾部,其中,所述辅助头部包括预设的魔幻数、加密后的基础头部的大小和加密后的叠加操作单元列表的
大小。
35.在步骤s140,根据所述文件头部结构对所述源文件进行处理,并且基于处理后的所述源文件和所述第二保护文件来形成第三保护文件。在一些实施例中,根据所述文件头部结构对所述源文件进行处理包括:根据所述随机破坏规则对所述源文件进行随机破坏。在一些实施例中,基于处理后的所述源文件和所述第二保护文件来形成第三保护文件包括:将处理后的所述源文件写入所述第二保护文件的尾部,以形成所述第三保护文件。
36.在一些实施例中,该文件处理方法还可以包括获取所述源文件,所述源文件包括人工智能源模型文件。
37.在一些实施例中,在生成所述第三保护文件之后,该文件处理方法还可以包括基于所述第三保护文件执行发布和部署。
38.根据本公开的实施例的文件处理方法不是对整个源文件(例如ai模型)进行加密,而是通过构建的文件头部结构对源文件进行随机破坏,并将随机破坏规则加密后写入源文件头部。由于对源文件进行随机破坏,因此针对同一个源文件,每次破坏的内容都不一样,从而破坏后的保护文件也不一样,最大限度提高源文件保护的机密性和安全性。同时,由于不对整个源文件进行加密,在实现对源文件进行保护的同时降低了对计算资源的需求。
39.下文中,通过示例性实施例将详细描述随机破坏规则。
40.在一些实施例中,所述随机破坏规则包括但不限于以下第一种随机破坏规则至第四种随机破坏规则。
41.1)第一种随机破坏规则
42.随机生成第一组随机数和第二组随机数,其中,所述第一组随机数对应到所述源文件中的操作区的偏移地址,所述第二组随机数对应到所述源文件中的操作区的目标偏移地址;于各所述操作区的偏移地址后分别插入第三组随机数作为操作长度,其中,所述第三组随机数的起始位置由操作区的目标偏移地址确定。
43.在第一种随机破坏规则中,文件头部结构由预设的保护魔幻数和预设数目的操作区列表共同构成。
44.其中操作区列表中的每个操作区由偏移地址、目标偏移地址和操作长度共同组成。
45.在第一种随机破坏规则中,所述文件头部结构的构建过程如下:
46.(1)设置文件头部结构的保护魔幻数为预设的魔幻数。
47.(2)设置文件头部结构的操作区,具体过程如下:
48.(a)生成两组预设数目的随机整数,要求生成的随机整数大于预设的最小值(如0)、小于源文件大小(以字节为单位)。同时要求两组随机数中的组内元素必须互不相同。
49.a-1:将其中一组随机数按照从小到大的顺序排列,并按顺序作为预设数目操作区的偏移地址。
50.a-2:将另外一组随机数按生成顺序作为预设数目操作区的目标偏移地址。
51.(b)再次生成一组预设数目的随机整数,要求生成的随机整数大于预设的最小值(如0)、小于“源文件的大小”乘以“预设比例”,其中预设比例大于0且小于1。
52.将生成的随机数按生成顺序作为预设数目操作区的操作长度。
53.(c)遍历所有预设数目的操作区,对于每一个操作区:
54.判断操作区的“目标偏移地址+操作长度”是否超过源文件大小,如果超过的话,将“源文件大小”减去“操作区的目标偏移地址”的大小作为操作区的操作长度。
55.2)第二种随机破坏规则
56.生成一组预设数目的随机数作为交换偏移地址列表;根据生成的随机数按照预设的规则进行配对,将所述交换偏移地址列表中的交换偏移地址分成多个配对区,每个配对区由两个交换地址构成。
57.在第二种随机破坏规则中,文件头部结构由预设的保护魔幻数、交换类型(如swap_type)、交换操作模式(如swap_op_mode)、配对模式(如swap_match_mode)、交换区长度(如swap_len)、实际配对数(如match_number)、奇数交换偏移地址列表、偶数交换偏移地址列表、奇数配对区列表和偶数配对区列表共同构成。
58.其中奇数配对区列表和偶数配对区列表中的每个配对区元素由交换地址一和交换地址二共同组成。
59.具体地,本实施例中,生成一组预设数目的随机数(即“奇数交换偏移地址列表”或者“偶数交换偏移地址列表”),根据生成的一组随机数(如a1,a2,a3,a4)按照预设的规则进行配对(比如将a1和a4配对,a2和a3配对),最终配对好的数量就是“实际配对数”(如a1和a4一对,a2和a3一对,所以这里的实际配对数就是2)。这种配对对应头部结构中的“配对区”的概念(多个“配对区”就构成了“配对区列表”的概念),“配对区”里面就是两个对应的地址,称为“交换地址一”和“交换地址二”(比如a1和a4配对,那么a1和a4构成一个配对区,里面的交换地址一和二对应的就是a1和a4)。最后将配对区中“交换地址一“和“交换地址二”对应到源文件的内容进行交换,交换的数据长度(即“交换区长度”)根据预设规则来确定。
60.其中,通过“交换类型”字段确定要生成的随机数的数目是奇数个还是偶数个。不同的“交换类型”对应的“交换操作模式”不同,“交换类型”为奇数和偶数都有两种对应的“交换操作模式”。不同的“交换类型”和“交换操作模式”,最终使用的“配对模式”的规则是一致的。
61.通过“交换类型”确定是奇数或者偶数之后,奇数对应使用“奇数交换偏移地址列表”和“奇数配对区列表”,偶数对应使用“偶数交换偏移地址列表”和“偶数配对区列表”。
62.本实施例中,所述“按照预设的规则进行配对”,配对的规则由”交换类型“、“交换操作模式”和“配对模式”来决定。
63.在第二种随机破坏规则中,所述文件头部结构的构建过程如下:
64.(1)设置文件头部结构的保护魔幻数为预设的魔幻数。
65.(2)随机生成一个正整数,将该整数与2进行取模运算,得到的值作为文件头部结构的交换类型(如swap_type),其中0表示交换类型为偶数,1表示交换类型为奇数。
66.(3)随机生成一个正整数,将该整数与2进行取模运算,得到的值作为文件头部结构的交换操作模式(如swap_op_mode),其中0表示交换操作模式一,1表示交换操作模式二。
67.(4)随机生成一个正整数,将该整数与3进行取模运算,得到的值作为文件头部结构的配对模式(如swap_match_mode),其中0表示配对模式一,1表示配对模式二,2表示配对模式三。
68.(5)如果交换类型(如swap_type)为奇数,则生成一组预设奇数数目的随机整数作为文件头部结构的奇数交换偏移地址列表。否则,交换类型是偶数,生成一组预设偶数数目
的随机整数作为文件头部结构的偶数交换偏移地址列表。
69.a)要求生成的随机数大于预设的最小值(如0)、小于源文件大小(以字节为单位)。
70.b)生成的上述交换偏移地址列表中的元素必须互不相同。
71.c)将生成的上述交换偏移地址列表中的元素按照从小到大的顺序排列。
72.(6)交换区长度(如swap_len)、实际配对数(如match_number)、奇数配对区列表和偶数配对区列表设置。具体来说:
73.6-1)如果交换类型(如swap_type)为奇数:
74.a)构建临时交换偏移地址列表:
75.a-1)如果交换操作模式(如swap_op_mode)为类型交换操作模式一:
76.临时交换偏移地址列表由奇数交换偏移地址列表构成。
77.a-2)如果交换操作模式(如swap_op_mode)为类型交换操作模式二:
78.临时交换偏移地址列表由在奇数交换偏移地址列表的首部和尾部各添加一个元素来构成。因此临时交换偏移地址列表的长度为:奇数交换偏移地址列表+2。并且:临时交换偏移地址列表的首部元素(即第1个元素)为:0。表示源文件的起始位置。临时交换偏移地址列表的尾部元素(即最后一个元素)为:源文件大小(以字节为单位)-1。
79.b)按顺序将临时交换偏移地址列表中两两直接相邻的交换偏移地址相减,得到一组相邻差。得到的该组相邻差的长度为:临时交换偏移地址列表的长度-1。
80.c)将得到的该组相邻差的最小值作为文件头部结构的交换区长度(如swap_len)。
81.d)将得到的该组相邻差的长度除以2并向下取整,作为文件头部结构的实际配对数(如match_number)。
82.e)奇数配对区列表按如下规则设置:
83.e-1)如果配对模式(如swap_match_mode)为配对模式一:
84.遍历奇数配对区列表,遍历索引(如index)从奇数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
85.设置配对区元素的交换地址一为临时交换偏移地址列表中的第“遍历索引(如index)”个元素的值。
86.设置配对区元素的交换地址二为临时交换偏移地址列表中的第“(临时交换偏移地址列表最后一个元素的索引)-1-遍历索引”个元素的值。
87.e-2)如果配对模式(如swap_match_mode)为配对模式二:
88.遍历奇数配对区列表,遍历索引(如index)从奇数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
89.设置配对区元素的交换地址一为临时交换偏移地址列表中的第“2乘遍历索引(如index)”个元素的值。
90.设置配对区元素的交换地址二为临时交换偏移地址列表中的第“2乘遍历索引(如index)+1”个元素的值。
91.e-3)如果配对模式(如swap_match_mode)为配对模式三:
92.设置随机选择列表的初值为:去除最后一个元素的临时交换偏移地址列表。因此该随机选择列表的初始长度为:临时交换偏移地址列表的长度-1。
93.遍历奇数配对区列表,遍历索引(如index)从奇数配对区列表的第一个元素开始
(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
94.设置配对区元素的交换地址一为随机选择列表的第一个元素的值。
95.生成一个随机正整数,将该整数与随机选择列表的长度进行取模运算,得到的值作为随机选择索引。如果随机选择索引为0(即第一个元素),则将随机选择索引加1。
96.设置配对区元素的交换地址二为随机选择列表中随机选择索引位置的值。
97.更新随机选择列表和随机选择列表的长度:将当前随机选择列表中除第一个元素和随机选择索引位置元素外的其他元素,按顺序构造一个新的随机选择列表,将该新的随机选择列表作为随机选择列表的新值。同时将“随机选择列表的长度-2“作为新的随机选择列表的长度。
98.6-2)如果交换类型(如swap_type)为偶数:
99.a)构建临时交换偏移地址列表:
100.a-1)如果交换操作模式(如swap_op_mode)为类型交换操作模式一:
101.临时交换偏移地址列表由在偶数交换偏移地址列表的首部添加一个元素来构成。因此临时交换偏移地址列表的长度为:偶数交换偏移地址列表+1。并且临时交换偏移地址列表的首部元素(即第1个元素)为:0。表示源文件的起始位置。
102.a-2)如果交换操作模式(如swap_op_mode)为类型交换操作模式二:
103.临时交换偏移地址列表由在偶数交换偏移地址列表的尾部添加一个元素来构成。因此临时交换偏移地址列表的长度为:偶数交换偏移地址列表+1。并且临时交换偏移地址列表的尾部元素(即最后一个元素)为:源文件大小(以字节为单位)-1。
104.b)按顺序将临时交换偏移地址列表中两两直接相邻的交换偏移地址相减,得到一组相邻差。得到的该组相邻差的长度为:临时交换偏移地址列表的长度-1。
105.c)将得到的该组相邻差的最小值作为文件头部结构的交换区长度(如swap_len)。
106.d)将得到的该组相邻差的长度除以2并向下取整,作为文件头部结构的实际配对数(如match_number)。
107.e)偶数配对区列表按如下规则设置:
108.e-1)如果配对模式(如swap_match_mode)为配对模式一:
109.遍历偶数配对区列表,遍历索引(如index)从偶数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:设置配对区元素的交换地址一为临时交换偏移地址列表中的第“遍历索引(如index)”个元素的值。
110.设置配对区元素的交换地址二为临时交换偏移地址列表中的第“(临时交换偏移地址列表最后一个元素的索引)-1-遍历索引”个元素的值。
111.e-2)如果配对模式(如swap_match_mode)为配对模式二:
112.遍历偶数配对区列表,遍历索引(如index)从偶数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
113.设置配对区元素的交换地址一为临时交换偏移地址列表中的第“2乘遍历索引(如index)”个元素的值。
114.设置配对区元素的交换地址二为临时交换偏移地址列表中的第“2乘遍历索引(如index)+1”个元素的值。
115.e-3)如果配对模式(如swap_match_mode)为配对模式三:
116.设置随机选择列表的初值为:去除最后一个元素的临时交换偏移地址列表。因此该随机选择列表的初始长度为:临时交换偏移地址列表的长度-1。
117.遍历偶数配对区列表,遍历索引(如index)从偶数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
118.设置配对区元素的交换地址一为随机选择列表的第一个元素的值。
119.生成一个随机正整数,将该整数与随机选择列表的长度进行取模运算,得到的值作为随机选择索引。如果随机选择索引为0(即第一个元素),则将随机选择索引加1。
120.设置配对区元素的交换地址二为随机选择列表中随机选择索引位置的值。
121.更新随机选择列表和随机选择列表的长度:将当前随机选择列表中除第一个元素和随机选择索引位置元素外的其他元素,按顺序构造一个新的随机选择列表,将该新的随机选择列表作为随机选择列表的新值。同时将“随机选择列表的长度-2“作为新的随机选择列表的长度。
122.3)第三种随机破坏规则
123.生成一组预设数目的随机数;根据生成的随机数将源文件按照预设的规则进行分组,并为每组源文件随机确定组类型;根据每组的组类型构建每组对应的文件头部结构。
124.在第三种随机破坏规则中,文件头部结构由预设的保护魔幻数、分组模式(如group_divide_mode)、操作点偏移地址列表(如op_offset)、实际组数(如group_number)、组长度类型(如group_len_type)和操作组列表共同构成。
125.其中:操作组列表中的每个操作组元素由组长度(如group_len)、组偏移地址列表(如group_offset)、头尾节点模式(如group_head_tail_mode)、组的头节点偏移地址(如group_head_offset)、组的尾节点偏移地址(如group_tail_offset)、组类型(如group_type)、组类型一头结构和组类型二头结构共同组成。
126.其中:组类型一头结构由实际操作区数目(如gap_num)和操作区列表组成。其中操作区列表中的每个操作区由偏移地址、目标偏移地址和操作长度共同组成。组类型二头结构由交换类型(如swap_type)、交换操作模式(如swap_op_mode)、配对模式(如swap_match_mode)、交换区长度(如swap_len)、实际配对数(如match_number)、奇数交换偏移地址列表、偶数交换偏移地址列表、奇数配对区列表和偶数配对区列表共同构成。
127.其中:奇数配对区列表和偶数配对区列表中的每个配对区元素由交换地址一和交换地址二共同组成。
128.具体地,本实施例中,生成一组预设数目的随机数(即“操作点偏移地址列表”),将源文件根据生成的随机数按照预设的规则进行分组,将源文件分段,每段对应一组,然后对不同的组根据随机确定的组类型(即操作组的“组类型”)应用构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第一种方式或构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第二种方式来构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则。
129.其中,每一组用“操作组”来表示,实际的组的数目用“实际组数”来表示,所有的组构成“操作组列表”的概念。“操作组”中的“组类型”来决定是应用构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第一种方式还是构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第二种方式的基本思想。“组类型一头结构”是应用构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第一种方式的基本思路所需要的信息,“组类型二头结构”是应用构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第二种方式的基本思路所需要的信息。
130.每个操作组的界限由“组的头节点偏移地址”和“组的尾节点偏移地址”来确定。分组方法有两种,对应“分组模式”,不同分组模式对组(即“操作组”)的配置规则不同。分组模式一将生成的随机数(即“操作点偏移地址列表”)作为分组的界限,每个组内部生成一组随机数(即“组偏移地址列表”),生成的随机数的数目由操作组的“组长度”来决定。分组模式二将生成的随机数(即“操作点偏移地址列表”)作为依据来将这些操作点按照预设的规则划分成不同的组。“组长度类型”和“头尾节点模式”只在分组模式二中使用,用于辅助划分组。
131.不同的分组方法在确定每个操作组的界限(即“组的头节点偏移地址”和“组的尾节点偏移地址”)时,采用不同的方法,分组模式二中根据三种“头尾节点模式”来确定。
132.在第三种随机破坏规则中,所述文件头部结构的构建过程如下:
133.(1)设置文件头部结构的保护魔幻数为预设的魔幻数。
134.(2)随机生成一个正整数,将该整数与2进行取模运算,得到的值作为文件头部结构的分组模式(如group_divide_mode),其中例如0表示分组模式一,1表示分组模式二。
135.(3)如果分组模式(如group_divide_mode)为模式一:
136.(3-1)设置文件头部结构的实际组数(如group_number)为预设组数。
137.(3-2)生成一组“实际组数-1”数目的随机整数作为文件头部结构的操作点偏移地址列表(如op_offset),即操作点偏移地址列表的长度为“实际组数-1”,并要求:
138.a)要求生成的随机数大于预设的最小值(如0)、小于源文件大小(以字节为单位)。
139.b)生成的上述操作点偏移地址列表中的元素必须互不相同。
140.c)将生成的上述操作点偏移地址列表中的元素按照从小到大的顺序排列。
141.(3-3)遍历文件头部结构的操作组列表,遍历索引(如index)从操作组列表的第一个元素开始(index=0),直到实际组数(如group_number)个元素。对于每一个操作组:
142.(3-3-1)设置操作组的“组的头节点偏移地址(如group_head_offset)”和“组的尾节点偏移地址(如group_tail_offset)”。
143.a)如果是第一个操作组:
144.设置组的头节点偏移地址(如group_head_offset)为0;
145.设置组的尾节点偏移地址(如group_tail_offset)为操作点偏移地址列表的第“遍历索引(如index)”个元素的值。
146.b)如果是最后一个操作组:
147.设置组的头节点偏移地址(如group_head_offset)为操作点偏移地址列表的第“遍历索引(如index)-1”个元素的值;
148.设置组的尾节点偏移地址(如group_tail_offset)为源文件大小(以字节为单位);
149.c)对于其他操作组:
150.设置组的头节点偏移地址(如group_head_offset)为操作点偏移地址列表的第“遍历索引(如index)-1”个元素的值;
151.设置组的尾节点偏移地址(如group_tail_offset)为操作点偏移地址列表的第“遍历索引(如index)”个元素的值;
152.(3-3-2)设置操作组的组长度(如group_len):
153.随机生成一个整数,要求生成的随机数不小于预设的最小组长度(如3)并且不大于预设的最大组长度。将得到的满足要求的随机整数作为操作组的组长度(如group_len)。
154.(3-3-3)设置操作组的组偏移地址列表(如group_offset):
155.生成一组“操作组的组长度”数目的随机整数作为操作组的组偏移地址列表(如group_offset),即操作组的组偏移地址列表的长度为当前操作组的组长度,并要求:
156.a)要求生成的随机数大于“组的头节点偏移地址”、小于“组的尾节点偏移地址”。
157.b)生成的上述组偏移地址列表中的元素必须互不相同。
158.c)将生成的上述组偏移地址列表中的元素按照从小到大的顺序排列。
159.(3-3-4)设置操作组的组类型(如group_type):
160.随机生成一个正整数,将该整数与2进行取模运算,得到的值作为操作组的组类型,其中0表示组类型一,1表示组类型二。
161.(3-3-5)如果操作组的组类型为组类型一,则按照如下(4)中的规则设置操作组的组类型一头结构:
162.(3-3-6)如果操作组的组类型为组类型二,则按照如下(5)中的规则设置操作组的组类型二头结构:
163.如果分组模式(如group_divide_mode)为模式二:
164.(3-1)生成一组预设数目的随机整数作为文件头部结构的操作点偏移地址列表(如op_offset),并要求:
165.a)要求生成的随机数大于预设的最小值(如0)、小于源文件大小(以字节为单位)。
166.b)生成的上述操作点偏移地址列表中的元素必须互不相同。
167.c)将生成的上述操作点偏移地址列表中的元素按照从小到大的顺序排列。
168.(3-2)设置文件头部结构的的组长度类型(如group_len_type):
169.随机生成一个正整数,将该整数与4进行取模运算,得到的值作为文件头部结构的的组长度类型,其中0表示组长度类型一,1表示组长度类型二,2表示组长度类型三,3表示组长度类型四。
170.(3-3)设置文件头部结构的实际组数(如group_number):
171.如果组长度类型为组长度类型一,设置文件头部结构的实际组数为:操作点偏移地址列表的长度除以预设的最大组长度,并向上取整。
172.如果组长度类型为组长度类型二,设置文件头部结构的实际组数为:操作点偏移地址列表的长度除以预设的最小组长度,并向下取整。
173.如果组长度类型为组长度类型三,设置文件头部结构的实际组数为预设组数。
174.如果组长度类型为组长度类型四,随机生成一个整数,要求生成的随机数不小于最小组数并且不大于最大组数。其中最小组数为“操作点偏移地址列表的长度除以预设的最大组长度,并向上取整”,最大组数为“操作点偏移地址列表的长度除以预设的最小组长度,并向下取整”。将得到的满足要求的随机整数作为文件头部结构的实际组数。
175.(3-4)遍历文件头部结构的操作组列表,遍历索引(如index)从操作组列表的第一个元素开始(index=0),直到实际组数(如group_number)个元素。对于每一个操作组:
176.(3-4-1)设置操作组的组长度(如group_len):
177.a)如果是最后一个操作组:
178.设置操作组的组长度为:“操作点偏移地址列表的长度”减去“遍历索引”乘以步长。其中步长为“操作点偏移地址列表的长度除以文件头部结构的实际组数,并向下取整”。
179.b)对于其他操作组:
180.设置操作组的组长度为:操作点偏移地址列表的长度除以文件头部结构的实际组数,并向下取整
181.(3-4-2)设置操作组的组偏移地址列表(如group_offset):
182.遍历操作组的组偏移地址列表,偏移地址索引(如i)从组偏移地址列表的第一个元素开始(i=0),直到操作组的组长度(如group_len)个元素。对于组偏移地址列表中的每一个偏移地址:
183.设置组偏移地址列表的第“偏移地址索引”位置的值为:文件头部结构的操作点偏移地址列表的第“操作组遍历索引乘以步长加上偏移地址索引”(即:操作组遍历索引x步长+偏移地址索引)个元素的值。其中步长为“操作点偏移地址列表的长度除以文件头部结构的实际组数,并向下取整”。
184.(3-4-3)设置操作组的头尾节点模式(如group_head_tail_mode):
185.随机生成一个正整数,将该整数与3进行取模运算,得到的值作为操作组的头尾节点模式,其中0表示头尾节点模式一,1表示头尾节点模式二,2表示头尾节点模式三。
186.(3-4-4)设置操作组的组类型(如group_type):
187.随机生成一个正整数,将该整数与2进行取模运算,得到的值作为操作组的组类型,其中0表示组类型一,1表示组类型二。
188.(3-5)再次遍历文件头部结构的操作组列表,遍历索引(如index)从操作组列表的第一个元素开始(index=0),直到实际组数(如group_number)个元素。对于每一个操作组:
189.(3-5-1)设置操作组的“组的头节点偏移地址(如group_head_offset)”和“组的尾节点偏移地址(如group_tail_offset)”190.如果操作组的头尾节点模式为头尾节点模式一:
191.a)如果是第一个操作组:
192.设置组的头节点偏移地址(如group_head_offset)为0。
193.设置组的尾节点偏移地址(如group_tail_offset)为当前操作组的组偏移地址列表的最后一个元素的值。
194.更新操作组的组偏移地址列表(如group_offset)为:原操作组的组偏移地址列表去除最后一个元素。
195.更新操作组的组长度(如group_len)为:原操作组的组长度(如group_len)减去1。
196.b)如果是最后一个操作组:
197.设置组的头节点偏移地址(如group_head_offset)为:前一个操作组的尾节点偏移地址。
198.设置组的尾节点偏移地址(如group_tail_offset)为源文件大小(以字节为单
位);
199.c)对于其他操作组:
200.设置组的头节点偏移地址(如group_head_offset)为:前一个操作组的尾节点偏移地址。
201.设置组的尾节点偏移地址(如group_tail_offset)为当前操作组的组偏移地址列表的最后一个元素的值。
202.更新操作组的组偏移地址列表(如group_offset)为:原操作组的组偏移地址列表去除最后一个元素。
203.更新操作组的组长度(如group_len)为:原操作组的组长度(如group_len)减去1。
204.如果操作组的头尾节点模式为头尾节点模式二:
205.a)如果是第一个操作组:
206.设置组的头节点偏移地址(如group_head_offset)为0。
207.设置组的尾节点偏移地址(如group_tail_offset)为后一个操作组的组偏移地址列表的第一个元素的值。
208.b)如果是最后一个操作组:
209.设置组的头节点偏移地址(如group_head_offset)为:前一个操作组的尾节点偏移地址。
210.设置组的尾节点偏移地址(如group_tail_offset)为源文件大小(以字节为单位);
211.更新操作组的组长度(如group_len)为:原操作组的组长度(如group_len)减去1。
212.更新操作组的组偏移地址列表(如group_offset)为:原操作组的组偏移地址列表去除第一个元素。
213.c)对于其他操作组:
214.设置组的头节点偏移地址(如group_head_offset)为:前一个操作组的尾节点偏移地址。
215.设置组的尾节点偏移地址(如group_tail_offset)为后一个操作组的组偏移地址列表的第一个元素的值。
216.更新操作组的组长度(如group_len)为:原操作组的组长度(如group_len)减去1。
217.更新操作组的组偏移地址列表(如group_offset)为:原操作组的组偏移地址列表去除第一个元素。
218.如果操作组的头尾节点模式为头尾节点模式三:
219.a)如果是第一个操作组:
220.设置组的头节点偏移地址(如group_head_offset)为0。
221.设置组的尾节点偏移地址(如group_tail_offset)为:“当前操作组的组偏移地址列表的最后一个元素的值”加上“组间差值乘以预设比例”。其中组间差值为后一个操作组的组偏移地址列表的第一个元素的值减去当前操作组的组偏移地址列表的最后一个元素的值。预设比例需大于0,小于1。
222.b)如果是最后一个操作组:
223.设置组的头节点偏移地址(如group_head_offset)为:前一个操作组的尾节点偏
移地址。
224.设置组的尾节点偏移地址(如group_tail_offset)为源文件大小(以字节为单位);
225.c)对于其他操作组:
226.设置组的头节点偏移地址(如group_head_offset)为:前一个操作组的尾节点偏移地址。
227.设置组的尾节点偏移地址(如group_tail_offset)为:“当前操作组的组偏移地址列表的最后一个元素的值”加上“组间差值乘以预设比例”。其中组间差值为后一个操作组的组偏移地址列表的第一个元素的值减去当前操作组的组偏移地址列表的最后一个元素的值。预设比例需大于0,小于1。
228.(3-5-2)如果操作组的组类型为组类型一,则按照如下(4)中的规则设置操作组的组类型一头结构:
229.(3-5-3)如果操作组的组类型为组类型二,则按照如下(5)中的规则设置操作组的组类型二头结构:
230.(4)设置操作组的组类型一头结构:
231.(4-1)设置组类型一头结构的实际操作区数目(如gap_num)为操作组的组长度。
232.(4-2)设置组类型一头结构的操作区列表,具体过程如下:
233.遍历操作区列表,遍历索引(如index)从操作区列表的第一个元素开始(index=0),直到实际操作区数目(如gap_num)个元素。对于每一个操作区:
234.a)设置操作区的偏移地址为操作组的组偏移地址列表的第“遍历索引(如index)”个元素的值;
235.b)生成一个随机整数,要求生成的随机整数大于预设的最小值(如0)、小于源文件大小(以字节为单位)。将得到的满足要求的随机整数作为操作区的目标偏移地址。
236.c)生成一个随机整数,要求生成的随机整数大于预设的最小值(如0)、小于“源文件的大小乘以预设比例”,其中预设比例大于0且小于1。
237.将得到的满足要求的随机整数作为操作区的操作长度。
238.d)判断操作区的“目标偏移地址+操作长度”是否超过源文件大小,如果超过的话,将源文件大小减去操作区的目标偏移地址的大小作为操作区的操作长度。
239.(5)设置操作组的组类型二头结构:
240.(5-1)将操作组的组长度与2进行取模运算,得到的值作为操作组的组类型二头结构的交换类型(如swap_type),其中0表示交换类型为偶数,1表示交换类型为奇数。
241.(5-2)随机生成一个正整数,将该整数与2进行取模运算,得到的值作为操作组的组类型二头结构的交换操作模式(如swap_op_mode),其中0表示交换操作模式一,1表示交换操作模式二。
242.(5-3)随机生成一个正整数,将该整数与3进行取模运算,得到的值作为操作组的组类型二头结构的配对模式(如swap_match_mode),其中0表示配对模式一,1表示配对模式二,2表示配对模式三。
243.(5-4)如果交换类型(如swap_type)为奇数,则将操作组的组偏移地址列表作为操作组的组类型二头结构的奇数交换偏移地址列表。否则,交换类型是偶数,则将操作组的组
偏移地址列表作为操作组的组类型二头结构的偶数交换偏移地址列表。
244.(5-5)交换区长度(如swap_len)、实际配对数(如match_number)、奇数配对区列表和偶数配对区列表设置。具体来说:
245.如果交换类型(如swap_type)为奇数:
246.a)构建临时交换偏移地址列表:
247.a-1)如果交换操作模式(如swap_op_mode)为类型交换操作模式一:
248.临时交换偏移地址列表由奇数交换偏移地址列表构成。
249.a-2)如果交换操作模式(如swap_op_mode)为类型交换操作模式二:临时交换偏移地址列表由在奇数交换偏移地址列表的首部和尾部各添加一个元素来构成。因此临时交换偏移地址列表的长度为:奇数交换偏移地址列表+2。并且:
250.临时交换偏移地址列表的首部元素(即第1个元素)为:操作组的“组的头节点偏移地址”。
251.临时交换偏移地址列表的尾部元素(即最后一个元素)为:操作组的“组的尾节点偏移地址"。
252.b)按顺序将临时交换偏移地址列表中两两直接相邻的交换偏移地址相减,得到一组相邻差。
253.得到的该组相邻差的长度为:临时交换偏移地址列表的长度-1。
254.c)将得到的该组相邻差的最小值作为操作组的组类型二头结构的交换区长度(如swap_len)。
255.d)将得到的该组相邻差的长度除以2并向下取整,作为操作组的组类型二头结构的实际配对数(如match_number)。
256.e)奇数配对区列表按如下规则设置:
257.e-1)如果配对模式(如swap_match_mode)为配对模式一:
258.遍历奇数配对区列表,遍历索引(如index)从奇数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
259.设置配对区元素的交换地址一为临时交换偏移地址列表中的第“遍历索引(如index)”个元素的值。
260.设置配对区元素的交换地址二为临时交换偏移地址列表中的第“(临时交换偏移地址列表最后一个元素的索引)-1-遍历索引”个元素的值。
261.e-2)如果配对模式(如swap_match_mode)为配对模式二:
262.遍历奇数配对区列表,遍历索引(如index)从奇数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
263.设置配对区元素的交换地址一为临时交换偏移地址列表中的第“2乘遍历索引(如index)”个元素的值。
264.设置配对区元素的交换地址二为临时交换偏移地址列表中的第“2乘遍历索引(如index)+1”个元素的值。
265.e-3)如果配对模式(如swap_match_mode)为配对模式三:
266.设置随机选择列表的初值为:去除最后一个元素的临时交换偏移地址列表。因此该随机选择列表的初始长度为:临时交换偏移地址列表的长度-1。
267.遍历奇数配对区列表,遍历索引(如index)从奇数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
268.设置配对区元素的交换地址一为随机选择列表的第一个元素的值。
269.生成一个随机正整数,将该整数与随机选择列表的长度进行取模运算,得到的值作为随机选择索引。如果随机选择索引为0(即第一个元素),则将随机选择索引加1。
270.设置配对区元素的交换地址二为随机选择列表中随机选择索引位置的值。
271.更新随机选择列表和随机选择列表的长度:将当前随机选择列表中除第一个元素和随机选择索引位置元素外的其他元素,按顺序构造一个新的随机选择列表,将该新的随机选择列表作为随机选择列表的新值。同时将“随机选择列表的长度-2”作为新的随机选择列表的长度。
272.如果交换类型(如swap_type)为偶数:
273.a)构建临时交换偏移地址列表:
274.a-1)如果交换操作模式(如swap_op_mode)为类型交换操作模式一:
275.临时交换偏移地址列表由在偶数交换偏移地址列表的首部添加一个元素来构成。因此临时交换偏移地址列表的长度为:偶数交换偏移地址列表+1。并且临时交换偏移地址列表的首部元素(即第1个元素)为:操作组的“组的头节点偏移地址”。
276.a-2)如果交换操作模式(如swap_op_mode)为类型交换操作模式二:
277.临时交换偏移地址列表由在偶数交换偏移地址列表的尾部添加一个元素来构成。因此临时交换偏移地址列表的长度为:偶数交换偏移地址列表+1。并且临时交换偏移地址列表的尾部元素(即最后一个元素)为:操作组的“组的尾节点偏移地址"。
278.b)按顺序将临时交换偏移地址列表中两两直接相邻的交换偏移地址相减,得到一组相邻差。
279.得到的该组相邻差的长度为:临时交换偏移地址列表的长度-1。
280.c)将得到的该组相邻差的最小值作为操作组的组类型二头结构的交换区长度(如swap_len)。
281.d)将得到的该组相邻差的长度除以2并向下取整,作为操作组的组类型二头结构的实际配对数(如match_number)。
282.e)偶数配对区列表按如下规则设置:
283.e-1)如果配对模式(如swap_match_mode)为配对模式一:
284.遍历偶数配对区列表,遍历索引(如index)从偶数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
285.设置配对区元素的交换地址一为临时交换偏移地址列表中的第“遍历索引(如index)”个元素的值。
286.设置配对区元素的交换地址二为临时交换偏移地址列表中的第“(临时交换偏移地址列表最后一个元素的索引)-1-遍历索引”个元素的值。
287.e-2)如果配对模式(如swap_match_mode)为配对模式二:
288.遍历偶数配对区列表,遍历索引(如index)从偶数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
289.设置配对区元素的交换地址一为临时交换偏移地址列表中的第“2乘遍历索引(如
index)”个元素的值。
290.设置配对区元素的交换地址二为临时交换偏移地址列表中的第“2乘遍历索引(如index)+1”个元素的值。
291.e-3)如果配对模式(如swap_match_mode)为配对模式三:
292.设置随机选择列表的初值为:去除最后一个元素的临时交换偏移地址列表。因此该随机选择列表的初始长度为:临时交换偏移地址列表的长度-1。
293.遍历偶数配对区列表,遍历索引(如index)从偶数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:设置配对区元素的交换地址一为随机选择列表的第一个元素的值。
294.生成一个随机正整数,将该整数与随机选择列表的长度进行取模运算,得到的值作为随机选择索引。如果随机选择索引为0(即第一个元素),则将随机选择索引加1。
295.设置配对区元素的交换地址二为随机选择列表中随机选择索引位置的值。
296.更新随机选择列表和随机选择列表的长度:将当前随机选择列表中除第一个元素和随机选择索引位置元素外的其他元素,按顺序构造一个新的随机选择列表,将该新的随机选择列表作为随机选择列表的新值。同时将“随机选择列表的长度-2”作为新的随机选择列表的长度。
297.4)第四种随机破坏规则
298.于本实施例中,根据第四种随机破坏规则构建所述文件头部结构包括:构建基础头部和叠加操作单元列表,并基于所述叠加操作单元列表对所述源文件进行随机次数的叠加操作;每一次所述叠加操作中,根据随机生成的不同操作类型构建对应的文件头部结构。
299.在第四种随机破坏规则中,文件头部结构由预设大小的基础头部和叠加操作单元列表共同组成。
300.其中,所述基础头部由预设的保护魔幻数、叠加模式(如overlay_mode)、叠加点偏移地址列表(如overlay_offset)、叠加点偏移地址列表长度(如overlay_offset_len)、实际叠加次数(如iteration_number)和叠加操作单元长度(如iteration_unit_size)共同组成。
301.所述叠加操作单元列表位于预设大小的基础头部之后,是由叠加次数(如iteration_number)个叠加操作单元组成的列表。其中叠加操作单元由迭代偏移地址列表长度(如iteration_offset_len)、迭代偏移地址列表(如iteration_offset)、迭代操作类型(如iteration_op_type)、迭代操作类型一头结构、迭代操作类型二头结构和迭代操作类型三头结构共同组成。
302.其中:迭代操作类型一头结构由实际操作区数目(如gap_num)和操作区列表组成。其中操作区列表中的每个操作区由偏移地址、目标偏移地址和操作长度共同组成。
303.迭代操作类型二头结构由交换类型(如swap_type)、交换操作模式(如swap_op_mode)、配对模式(如swap_match_mode)、交换区长度(如swap_len)、实际配对数(如match_number)、奇数交换偏移地址列表、偶数交换偏移地址列表、奇数配对区列表和偶数配对区列表共同构成。其中奇数配对区列表和偶数配对区列表中的每个配对区元素由交换地址一和交换地址二共同组成。
304.迭代操作类型三头结构由分组模式(如group_divide_mode)、操作点偏移地址列
表(如op_offset)、实际组数(如group_number)、组长度类型(如group_len_type)和操作组列表共同构成。
305.其中操作组列表中的每个操作组元素由组长度(如group_len)、组偏移地址列表(如group_offset)、头尾节点模式(如group_head_tail_mode)、组的头节点偏移地址(如group_head_offset)、组的尾节点偏移地址(如group_tail_offset)、组类型(如group_type)、组类型一头结构和组类型二头结构共同组成。
306.其中组类型一头结构和迭代操作类型一头结构相同,组类型二头结构和迭代操作类型二头结构相同。
307.具体地,本实施例中,对源文件进行随机次数(即"实际叠加次数")的操作,对于每一次操作根据随机生成的不同操作类型(即"迭代操作类型")应用构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第一种方式、构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第二种方式或构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第三种方式的基本思想。
308.其中,每一次操作用"叠加操作单元"来表示,"叠加操作单元"的大小用"叠加操作单元长度"来表示,所有的操作构成"叠加操作单元列表"。
[0309]“叠加操作单元”中的“迭代操作类型”来决定是应用构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第一种方式、构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第二种方式或构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第三种方式的基本思想。“迭代操作类型一头结构”就是应用构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第一种方式的基本思路所需要的信息。“迭代操作类型二头结构”就是应用构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第二种方式的基本思路所需要的信息。“迭代操作类型三头结构”就是应用构建文件头部结构,所述文件头部结构包括将要对所述源文件执行的处理规则的第三种方式的基本思路所需要的信息。
[0310]
每一次操作可以采用两种操作方法(即"叠加模式"),操作方法一(即"叠加模式一")每次操作过程使用的随机数都是随机生成(即"迭代偏移地址列表"),每次生成的随机数的数目(即"迭代偏移地址列表长度")也不一样。操作方法二(即"叠加模式二")使用一组相同的基础随机数(即“叠加点偏移地址列表”,长度由"叠加点偏移地址列表长度"确定),但是每次操作过程,会在这组基础随机数的基础上按照预设的规则进行随机变换,将变换的值作为"迭代偏移地址列表"中的值。
[0311]“叠加点偏移地址列表”和“叠加点偏移地址列表长度”只在操作方法二(即"叠加模式二")中使用,叠加模式一不需要使用。
[0312]
在第四种随机破坏规则中,所述文件头部结构的构建过程如下:
[0313]
(1)设置文件头部结构中基础头部的保护魔幻数为预设的魔幻数。
[0314]
(2)随机生成一个正整数,要求该整数大于等于预设的最小值,同时小于等于预设的最大值。将得到的满足要求的随机正整数作为文件头部结构中基础头部的实际叠加次数(如iteration_number)。
[0315]
(3)设置文件头部结构中基础头部的叠加操作单元长度(如iteration_unit_size)为叠加操作单元的大小。
[0316]
(4)随机生成一个正整数,将该整数与2进行取模运算,得到的值作为文件头部结构中基础头部的叠加模式(如overlay_mode),其中0表示叠加模式一,1表示叠加模式二。
[0317]
(5)构建一个由实际叠加次数(如iteration_number)个叠加操作单元组成的列表,称为叠加操作单元列表。
[0318]
(6)如果叠加模式(如overlay_mode)为叠加模式一:
[0319]
(6-1)设置扩展长度(如extend_len)初值为0。
[0320]
(6-2)遍历叠加操作单元列表,遍历索引(如iterate_index)从叠加操作单元列表的第一个元素开始(iterate_index=0),直到文件头部结构中基础头部的实际叠加次数(如iteration_number)个元素。对于每一个叠加操作单元:
[0321]
(6-2-1)随机生成一个正整数,要求该整数大于等于预设的最小值,同时小于等于预设的最大值。将得到的满足要求的随机正整数作为叠加操作单元的迭代偏移地址列表长度(如iteration_offset_len)。
[0322]
(6-2-2)生成一组“迭代偏移地址列表长度”数目的随机整数作为叠加操作单元的迭代偏移地址列表(如iteration_offset),并要求:
[0323]
a)要求生成的随机数大于预设的最小值(如0)、小于“源文件大小加上扩展长度”(以字节为单位)。
[0324]
b)生成的上述迭代偏移地址列表中的元素必须互不相同。
[0325]
c)将生成的上述迭代偏移地址列表中的元素按照从小到大的顺序排列。
[0326]
(6-2-3)随机生成一个正整数,将该整数与3进行取模运算,得到的值作为叠加操作单元的迭代操作类型(如iteration_op_type),其中0表示迭代操作类型一,1表示迭代操作类型二,2表述迭代操作类型三。
[0327]
(6-2-4)根据叠加操作单元的迭代操作类型(如iteration_op_type)设置对应的迭代操作类型头结构,具体来说:
[0328]
(a)如果叠加操作单元的迭代操作类型(如iteration_op_type)为迭代操作类型一,则按照如下3中的规则设置叠加操作单元的迭代操作类型一头结构。
[0329]
(b)如果叠加操作单元的迭代操作类型(如iteration_op_type)为迭代操作类型二,则按照如下4中的规则设置叠加操作单元的迭代操作类型二头结构。
[0330]
(c)如果叠加操作单元的迭代操作类型(如iteration_op_type)为迭代操作类型三,则按照如下5中的规则设置叠加操作单元的迭代操作类型三头结构。
[0331]
如果叠加模式(如overlay_mode)为叠加模式二:
[0332]
(6-1)随机生成一个正整数,要求该整数大于等于预设的最小值,同时小于等于预设的最大值。将得到的满足要求的随机正整数作为文件头部结构中基础头部的叠加点偏移地址列表长度(如overlay_offset_len)。
[0333]
(6-2)生成一组“叠加点偏移地址列表长度”数目的随机整数作为文件头部结构中基础头部的叠加点偏移地址列表(如overlay_offset),并要求:
[0334]
a)要求生成的随机数大于预设的最小值(如0)、小于“源文件大小”(以字节为单位)。
[0335]
b)生成的上述叠加点偏移地址列表中的元素必须互不相同。
[0336]
c)将生成的上述叠加点偏移地址列表中的元素按照从小到大的顺序排列。
[0337]
(6-3)设置扩展长度(如extend_len)初值为0。
[0338]
(6-4)遍历叠加操作单元列表,遍历索引(如iterate_index)从叠加操作单元列表的第一个元素开始(iterate_index=0),直到文件头部结构中基础头部的实际叠加次数(如iteration_number)个元素。对于每一个叠加操作单元:
[0339]
(6-4-1)设置叠加操作单元的迭代偏移地址列表长度(如iteration_offset_len)为基础头部的叠加点偏移地址列表长度(如overlay_offset_len)。
[0340]
(6-4-2)遍历叠加操作单元的迭代偏移地址列表,遍历索引(如i)从迭代偏移地址列表的第一个元素开始(i=0),直到叠加操作单元的迭代偏移地址列表长度(如iteration_offset_len)个元素。对于迭代偏移地址列表:
[0341]
设置叠加操作单元的迭代偏移地址列表的第“遍历索引(如i)”元素的值为:基础头部的叠加点偏移地址列表的第“遍历索引(如i)”个元素的值+辅助增量。其中辅助增量为:随机比例乘以扩展长度,并向下取整。随机比例是从一组预设比例列表中随机选取的一个元素,预设比例列表中的每一个元素都是一个大于0,小于1的数。
[0342]
(6-4-3)随机生成一个正整数,将该整数与3进行取模运算,得到的值作为叠加操作单元的迭代操作类型(如iteration_op_type),其中0表示迭代操作类型一,1表示迭代操作类型二,2表述迭代操作类型三。
[0343]
如果迭代操作类型为迭代操作类型二,判断前一个叠加操作单元的迭代操作类型是否也是类型二,如果是:随机生成一个正整数,将该整数与2进行取模运算,如果取摸结果为0,则更新迭代操作类型为迭代操作类型一,否则:更新迭代操作类型为迭代操作类型三。
[0344]
(6-4-4)根据叠加操作单元的迭代操作类型(如iteration_op_type)设置对应的迭代操作类型头结构,具体来说:
[0345]
(a)如果叠加操作单元的迭代操作类型(如iteration_op_type)为迭代操作类型一,则按照如下3中的规则设置叠加操作单元的迭代操作类型一头结构。
[0346]
(b)如果叠加操作单元的迭代操作类型(如iteration_op_type)为迭代操作类型二,则按照如下4中的规则设置叠加操作单元的迭代操作类型二头结构。
[0347]
(c)如果叠加操作单元的迭代操作类型(如iteration_op_type)为迭代操作类型三,则按照如下5中的规则设置叠加操作单元的迭代操作类型三头结构。
[0348]
3.设置叠加操作单元的迭代操作类型一头结构:
[0349]
(1)设置叠加操作单元的迭代操作类型一头结构的实际操作区数目(如gap_num)为叠加操作单元的迭代偏移地址列表长度。
[0350]
(2)设置叠加操作单元的迭代操作类型一头结构的操作区列表,具体过程如下:
[0351]
(2-1)设置临时附加长度(如gap_source_addition_len)为扩展长度(如extend_len)。
[0352]
(2-2)遍历操作区列表,遍历索引(如index)从操作区列表的第一个元素开始(index=0),直到实际操作区数目(如gap_num)个元素。对于每一个操作区:
[0353]
a)设置操作区的偏移地址为叠加操作单元的迭代偏移地址列表的第“遍历索引(如index)”个元素的值;
[0354]
b)生成一个随机整数,要求生成的随机整数大于预设的最小值(如0)、小于“源文件大小加临时附加长度”(以字节为单位)。将得到的满足要求的随机整数作为操作区的目标偏移地址。
[0355]
c)生成一个随机整数,要求生成的随机整数大于预设的最小值(如0)、小于“(源文件大小加临时附加长度)乘以预设比例”,其中预设比例大于0且小于1。
[0356]
将得到的满足要求的随机整数作为操作区的操作长度。
[0357]
d)判断操作区的“目标偏移地址+操作长度”是否超过“源文件大小+临时附加长度”,如果超过的话,将“源文件大小+临时附加长度”减去操作区的目标偏移地址的大小作为操作区的操作长度。
[0358]
e)更新扩展长度(如extend_len)为:原扩展长度加上操作区的操作长度。
[0359]
4.设置叠加操作单元的迭代操作类型二头结构:
[0360]
(1)将叠加操作单元的迭代偏移地址列表长度与2进行取模运算,得到的值作为叠加操作单元的迭代操作类型二头结构的交换类型(如swap_type),其中0表示交换类型为偶数,1表示交换类型为奇数。
[0361]
(2)随机生成一个正整数,将该整数与2进行取模运算,得到的值作为叠加操作单元的迭代操作类型二头结构的交换操作模式(如swap_op_mode),其中0表示交换操作模式一,1表示交换操作模式二。
[0362]
(3)随机生成一个正整数,将该整数与3进行取模运算,得到的值作为叠加操作单元的迭代操作类型二头结构的配对模式(如swap_match_mode),其中0表示配对模式一,1表示配对模式二,2表示配对模式三。
[0363]
(4)如果交换类型(如swap_type)为奇数,则将叠加操作单元的迭代偏移地址列表作为叠加操作单元的迭代操作类型二头结构的奇数交换偏移地址列表。否则,交换类型是偶数,则将叠加操作单元的迭代偏移地址列表作为叠加操作单元的迭代操作类型二头结构的偶数交换偏移地址列表。
[0364]
(5)交换区长度(如swap_len)、实际配对数(如match_number)、奇数配对区列表和偶数配对区列表设置。具体来说:
[0365]
(5-1)如果交换类型(如swap_type)为奇数:
[0366]
a)构建临时交换偏移地址列表:
[0367]
a-1)如果交换操作模式(如swap_op_mode)为类型交换操作模式一:
[0368]
临时交换偏移地址列表由奇数交换偏移地址列表构成。
[0369]
a-2)如果交换操作模式(如swap_op_mode)为类型交换操作模式二:临时交换偏移地址列表由在奇数交换偏移地址列表的首部和尾部各添加一个元素来构成。因此临时交换偏移地址列表的长度为:奇数交换偏移地址列表+2。并且:临时交换偏移地址列表的首部元素(即第1个元素)为:0。
[0370]
临时交换偏移地址列表的尾部元素(即最后一个元素)为:源文件大小+扩展长度。
[0371]
b)按顺序将临时交换偏移地址列表中两两直接相邻的交换偏移地址相减,得到一组相邻差。
[0372]
得到的该组相邻差的长度为:临时交换偏移地址列表的长度-1。
[0373]
c)将得到的该组相邻差的最小值作为叠加操作单元的迭代操作类型二头结构的
交换区长度(如swap_len)。
[0374]
d)将得到的该组相邻差的长度除以2并向下取整,作为叠加操作单元的迭代操作类型二头结构的实际配对数(如match_number)。
[0375]
e)奇数配对区列表按如下规则设置:
[0376]
e-1)如果配对模式(如swap_match_mode)为配对模式一:
[0377]
遍历奇数配对区列表,遍历索引(如index)从奇数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
[0378]
设置配对区元素的交换地址一为临时交换偏移地址列表中的第“遍历索引(如index)”个元素的值。
[0379]
设置配对区元素的交换地址二为临时交换偏移地址列表中的第“(临时交换偏移地址列表最后一个元素的索引)-1-遍历索引”个元素的值。
[0380]
e-2)如果配对模式(如swap_match_mode)为配对模式二:
[0381]
遍历奇数配对区列表,遍历索引(如index)从奇数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
[0382]
设置配对区元素的交换地址一为临时交换偏移地址列表中的第“2乘遍历索引(如index)”个元素的值。
[0383]
设置配对区元素的交换地址二为临时交换偏移地址列表中的第“2乘遍历索引(如index)+1”个元素的值。
[0384]
e-3)如果配对模式(如swap_match_mode)为配对模式三:
[0385]
设置随机选择列表的初值为:去除最后一个元素的临时交换偏移地址列表。因此该随机选择列表的初始长度为:临时交换偏移地址列表的长度-1。
[0386]
遍历奇数配对区列表,遍历索引(如index)从奇数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
[0387]
设置配对区元素的交换地址一为随机选择列表的第一个元素的值。
[0388]
生成一个随机正整数,将该整数与随机选择列表的长度进行取模运算,得到的值作为随机选择索引。如果随机选择索引为0(即第一个元素),则将随机选择索引加1。
[0389]
设置配对区元素的交换地址二为随机选择列表中随机选择索引位置的值。
[0390]
更新随机选择列表和随机选择列表的长度:将当前随机选择列表中除第一个元素和随机选择索引位置元素外的其他元素,按顺序构造一个新的随机选择列表,将该新的随机选择列表作为随机选择列表的新值。同时将“随机选择列表的长度-2”作为新的随机选择列表的长度。
[0391]
(5-2)如果交换类型(如swap_type)为偶数:
[0392]
a)构建临时交换偏移地址列表:
[0393]
a-1)如果交换操作模式(如swap_op_mode)为类型交换操作模式一:
[0394]
临时交换偏移地址列表由在偶数交换偏移地址列表的首部添加一个元素来构成。因此临时交换偏移地址列表的长度为:偶数交换偏移地址列表+1。并且临时交换偏移地址列表的首部元素(即第1个元素)为:0。
[0395]
a-2)如果交换操作模式(如swap_op_mode)为类型交换操作模式二:
[0396]
临时交换偏移地址列表由在偶数交换偏移地址列表的尾部添加一个元素来构成。
因此临时交换偏移地址列表的长度为:偶数交换偏移地址列表+1。并且临时交换偏移地址列表的尾部元素(即最后一个元素)为:源文件大小+扩展长度。
[0397]
b)按顺序将临时交换偏移地址列表中两两直接相邻的交换偏移地址相减,得到一组相邻差。
[0398]
得到的该组相邻差的长度为:临时交换偏移地址列表的长度-1。
[0399]
c)将得到的该组相邻差的最小值作为叠加操作单元的迭代操作类型二头结构的交换区长度(如swap_len)。
[0400]
d)将得到的该组相邻差的长度除以2并向下取整,作为叠加操作单元的迭代操作类型二头结构的实际配对数(如match_number)。
[0401]
e)偶数配对区列表按如下规则设置:
[0402]
e-1)如果配对模式(如swap_match_mode)为配对模式一:
[0403]
遍历偶数配对区列表,遍历索引(如index)从偶数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
[0404]
设置配对区元素的交换地址一为临时交换偏移地址列表中的第“遍历索引(如index)”个元素的值。
[0405]
设置配对区元素的交换地址二为临时交换偏移地址列表中的第“(临时交换偏移地址列表最后一个元素的索引)-1-遍历索引”个元素的值。
[0406]
e-2)如果配对模式(如swap_match_mode)为配对模式二:
[0407]
遍历偶数配对区列表,遍历索引(如index)从偶数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
[0408]
设置配对区元素的交换地址一为临时交换偏移地址列表中的第“2乘遍历索引(如index)”个元素的值。
[0409]
设置配对区元素的交换地址二为临时交换偏移地址列表中的第“2乘遍历索引(如index)+1”个元素的值。
[0410]
e-3)如果配对模式(如swap_match_mode)为配对模式三:
[0411]
设置随机选择列表的初值为:去除最后一个元素的临时交换偏移地址列表。因此该随机选择列表的初始长度为:临时交换偏移地址列表的长度-1。
[0412]
遍历偶数配对区列表,遍历索引(如index)从偶数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
[0413]
设置配对区元素的交换地址一为随机选择列表的第一个元素的值。
[0414]
生成一个随机正整数,将该整数与随机选择列表的长度进行取模运算,得到的值作为随机选择索引。如果随机选择索引为0(即第一个元素),则将随机选择索引加1。
[0415]
设置配对区元素的交换地址二为随机选择列表中随机选择索引位置的值。
[0416]
更新随机选择列表和随机选择列表的长度:将当前随机选择列表中除第一个元素和随机选择索引位置元素外的其他元素,按顺序构造一个新的随机选择列表,将该新的随机选择列表作为随机选择列表的新值。同时将“随机选择列表的长度-2”作为新的随机选择列表的长度。
[0417]
5.设置叠加操作单元的迭代操作类型三头结构:
[0418]
(1)设置临时附加长度(如gap_source_addition_len)为扩展长度(如extend_
len)。
[0419]
(2)随机生成一个正整数,将该整数与2进行取模运算,得到的值作为叠加操作单元的迭代操作类型三头结构的分组模式(如group_divide_mode),其中0表示分组模式一,1表示分组模式二。
[0420]
(3)如果分组模式(如group_divide_mode)为模式一:
[0421]
(3-1)设置叠加操作单元的迭代操作类型三头结构的实际组数(如group_number)为“叠加操作单元的迭代偏移地址列表长度+1"。
[0422]
(3-2)将叠加操作单元的迭代偏移地址列表作为叠加操作单元的迭代操作类型三头结构的操作点偏移地址列表(如op_offset),即操作点偏移地址列表的长度为“实际组数-1”(即叠加操作单元的迭代偏移地址列表长度)
[0423]
(3-3)遍历叠加操作单元的迭代操作类型三头结构的操作组列表,遍历索引(如index)从操作组列表的第一个元素开始(index=0),直到实际组数(如group_number)个元素。对于每一个操作组:
[0424]
(3-3-1)设置操作组的“组的头节点偏移地址(如group_head_offset)”和“组的尾节点偏移地址(如group_tail_offset)”。
[0425]
a)如果是第一个操作组:
[0426]
设置组的头节点偏移地址(如group_head_offset)为0;
[0427]
设置组的尾节点偏移地址(如group_tail_offset)为操作点偏移地址列表的第“遍历索引(如index)”个元素的值。
[0428]
b)如果是最后一个操作组:
[0429]
设置组的头节点偏移地址(如group_head_offset)为操作点偏移地址列表的第“遍历索引(如index)-1”个元素的值;
[0430]
设置组的尾节点偏移地址(如group_tail_offset)为:源文件大小+临时附加长度(以字节为单位);
[0431]
c)对于其他操作组:
[0432]
设置组的头节点偏移地址(如group_head_offset)为操作点偏移地址列表的第“遍历索引(如index)-1”个元素的值;
[0433]
设置组的尾节点偏移地址(如group_tail_offset)为操作点偏移地址列表的第“遍历索引(如index)”个元素的值;
[0434]
(3-3-2)设置操作组的组长度(如group_len):
[0435]
随机生成一个整数,要求生成的随机数不小于预设的最小组长度(如3)并且不大于预设的最大组长度。将得到的满足要求的随机整数作为操作组的组长度(如group_len)
[0436]
(3-3-3)设置操作组的组偏移地址列表(如group_offset):
[0437]
生成一组“操作组的组长度”数目的随机整数作为操作组的组偏移地址列表(如group_offset),即操作组的组偏移地址列表的长度为当前操作组的组长度,并要求:
[0438]
a)要求生成的随机数大于“组的头节点偏移地址”、小于“组的尾节点偏移地址”。
[0439]
b)生成的上述组偏移地址列表中的元素必须互不相同。
[0440]
c)将生成的上述组偏移地址列表中的元素按照从小到大的顺序排列。
[0441]
(3-3-4)设置操作组的组类型(如group_type):
[0442]
随机生成一个正整数,将该整数与2进行取模运算,得到的值作为操作组的组类型,其中0表示组类型一,1表示组类型二。
[0443]
(3-3-5)如果操作组的组类型为组类型一,则按照如下(4)中的规则设置操作组的组类型一头结构:
[0444]
(3-3-6)如果操作组的组类型为组类型二,则按照如下(5)中的规则设置操作组的组类型二头结构:
[0445]
如果分组模式(如group_divide_mode)为模式二:
[0446]
(3-1)将叠加操作单元的迭代偏移地址列表作为叠加操作单元的迭代操作类型三头结构的操作点偏移地址列表(如op_offset)。
[0447]
(3-2)设置叠加操作单元的迭代操作类型三头结构的组长度类型(如group_len_type):
[0448]
随机生成一个正整数,将该整数与4进行取模运算,得到的值作为叠加操作单元的迭代操作类型三头结构的组长度类型,其中0表示组长度类型一,1表示组长度类型二,2表示组长度类型三,3表示组长度类型四。
[0449]
(3-3)设置叠加操作单元的迭代操作类型三头结构的实际组数(如group_number):
[0450]
如果组长度类型为组长度类型一,设置文件头部结构的实际组数为:操作点偏移地址列表的长度除以预设的最大组长度,并向上取整。
[0451]
如果组长度类型为组长度类型二,设置文件头部结构的实际组数为:操作点偏移地址列表的长度除以预设的最小组长度,并向下取整。
[0452]
如果组长度类型为组长度类型三,设置文件头部结构的实际组数为预设组数。
[0453]
如果组长度类型为组长度类型四,随机生成一个整数,要求生成的随机数不小于最小组数并且不大于最大组数。其中最小组数为“操作点偏移地址列表的长度除以预设的最大组长度,并向上取整”,最大组数为“操作点偏移地址列表的长度除以预设的最小组长度,并向下取整”。将得到的满足要求的随机整数作为叠加操作单元的迭代操作类型三头结构的实际组数。
[0454]
(3-4)遍历叠加操作单元的迭代操作类型三头结构的操作组列表,遍历索引(如index)从操作组列表的第一个元素开始(index=0),直到实际组数(如group_number)个元素。对于每一个操作组:
[0455]
(3-4-1)设置操作组的组长度(如group_len):
[0456]
a)如果是最后一个操作组:
[0457]
设置操作组的组长度为:“操作点偏移地址列表的长度”减去“遍历索引”乘以步长。其中步长为“操作点偏移地址列表的长度除以叠加操作单元的迭代操作类型三头结构的实际组数,并向下取整”[0458]
b)对于其他操作组:
[0459]
设置操作组的组长度为:操作点偏移地址列表的长度除以叠加操作单元的迭代操作类型三头结构的实际组数,并向下取整。
[0460]
(3-4-2)设置操作组的组偏移地址列表(如group_offset):
[0461]
遍历操作组的组偏移地址列表,偏移地址索引(如i)从组偏移地址列表的第一个
元素开始(i=0),直到操作组的组长度(如group_len)个元素。对于组偏移地址列表中的每一个偏移地址:
[0462]
设置组偏移地址列表的第“偏移地址索引”位置的值为:叠加操作单元的迭代操作类型三头结构的操作点偏移地址列表的第“操作组遍历索引乘以步长加上偏移地址索引”(即:操作组遍历索引x步长+偏移地址索引)个元素的值。其中步长为“操作点偏移地址列表的长度除以叠加操作单元的迭代操作类型三头结构的实际组数,并向下取整”。
[0463]
(3-4-3)设置操作组的头尾节点模式(如group_head_tail_mode):
[0464]
随机生成一个正整数,将该整数与3进行取模运算,得到的值作为操作组的头尾节点模式,其中0表示头尾节点模式一,1表示头尾节点模式二,2表示头尾节点模式三。
[0465]
(3-4-4)设置操作组的组类型(如group_type):
[0466]
随机生成一个正整数,将该整数与2进行取模运算,得到的值作为操作组的组类型,其中0表示组类型一,1表示组类型二。
[0467]
(3-5)再次遍历文件头部结构的操作组列表,遍历索引(如index)从操作组列表的第一个元素开始(index=0),直到实际组数(如group_number)个元素。对于每一个操作组:
[0468]
(3-5-1)设置操作组的“组的头节点偏移地址(如group_head_offset)”和“组的尾节点偏移地址(如group_tail_offset)”。
[0469]
如果操作组的头尾节点模式为头尾节点模式一:
[0470]
a)如果是第一个操作组:
[0471]
设置组的头节点偏移地址(如group_head_offset)为0。
[0472]
设置组的尾节点偏移地址(如group_tail_offset)为当前操作组的组偏移地址列表的最后一个元素的值。
[0473]
更新操作组的组偏移地址列表(如group_offset)为:原操作组的组偏移地址列表去除最后一个元素。
[0474]
更新操作组的组长度(如group_len)为:原操作组的组长度(如group_len)减去1。
[0475]
b)如果是最后一个操作组:
[0476]
设置组的头节点偏移地址(如group_head_offset)为:前一个操作组的尾节点偏移地址。
[0477]
设置组的尾节点偏移地址(如group_tail_offset)为:源文件大小+临时附加长度(以字节为单位);
[0478]
c)对于其他操作组:
[0479]
设置组的头节点偏移地址(如group_head_offset)为:前一个操作组的尾节点偏移地址。
[0480]
设置组的尾节点偏移地址(如group_tail_offset)为当前操作组的组偏移地址列表的最后一个元素的值。
[0481]
更新操作组的组偏移地址列表(如group_offset)为:原操作组的组偏移地址列表去除最后一个元素。
[0482]
更新操作组的组长度(如group_len)为:原操作组的组长度(如group_len)减去1。
[0483]
如果操作组的头尾节点模式为头尾节点模式二:
[0484]
a)如果是第一个操作组:
[0485]
设置组的头节点偏移地址(如group_head_offset)为0。
[0486]
设置组的尾节点偏移地址(如group_tail_offset)为后一个操作组的组偏移地址列表的第一个元素的值。
[0487]
b)如果是最后一个操作组:
[0488]
设置组的头节点偏移地址(如group_head_offset)为:前一个操作组的尾节点偏移地址。
[0489]
设置组的尾节点偏移地址(如group_tail_offset)为:源文件大小+临时附加长度(以字节为单位);
[0490]
更新操作组的组长度(如group_len)为:原操作组的组长度(如group_len)减去1。
[0491]
更新操作组的组偏移地址列表(如group_offset)为:原操作组的组偏移地址列表去除第一个元素。
[0492]
c)对于其他操作组:
[0493]
设置组的头节点偏移地址(如group_head_offset)为:前一个操作组的尾节点偏移地址。
[0494]
设置组的尾节点偏移地址(如group_tail_offset)为后一个操作组的组偏移地址列表的第一个元素的值。
[0495]
更新操作组的组长度(如group_len)为:原操作组的组长度(如group_len)减去1。
[0496]
更新操作组的组偏移地址列表(如group_offset)为:原操作组的组偏移地址列表去除第一个元素。
[0497]
如果操作组的头尾节点模式为头尾节点模式三:
[0498]
a)如果是第一个操作组:
[0499]
设置组的头节点偏移地址(如group_head_offset)为0。
[0500]
设置组的尾节点偏移地址(如group_tail_offset)为:“当前操作组的组偏移地址列表的最后一个元素的值”加上“组间差值乘以预设比例”。其中组间差值为后一个操作组的组偏移地址列表的第一个元素的值减去当前操作组的组偏移地址列表的最后一个元素的值。预设比例需大于0,小于1。
[0501]
b)如果是最后一个操作组:
[0502]
设置组的头节点偏移地址(如group_head_offset)为:前一个操作组的尾节点偏移地址。
[0503]
设置组的尾节点偏移地址(如group_tail_offset)为:源文件大小+临时附加长度(以字节为单位);
[0504]
c)对于其他操作组:
[0505]
设置组的头节点偏移地址(如group_head_offset)为:前一个操作组的尾节点偏移地址。
[0506]
设置组的尾节点偏移地址(如group_tail_offset)为:“当前操作组的组偏移地址列表的最后一个元素的值”加上“组间差值乘以预设比例”。其中组间差值为后一个操作组的组偏移地址列表的第一个元素的值减去当前操作组的组偏移地址列表的最后一个元素的值。预设比例需大于0,小于1。
[0507]
(3-5-2)如果操作组的组类型为组类型一,则按照如下(4)中的规则设置操作组的
组类型一头结构:
[0508]
(3-5-3)如果操作组的组类型为组类型二,则按照如下(5)中的规则设置操作组的组类型二头结构:
[0509]
(4)设置操作组的组类型一头结构:
[0510]
(4-1)设置组类型一头结构的实际操作区数目(如gap_num)为操作组的组长度。
[0511]
(4-2)设置组类型一头结构的操作区列表,具体过程如下:
[0512]
(4-2-1)设置临时附加长度(如gap_source_addition_len)为扩展长度(如extend_len)。
[0513]
(4-2-2)遍历操作区列表,遍历索引(如index)从操作区列表的第一个元素开始(index=0),直到实际操作区数目(如gap_num)个元素。对于每一个操作区:
[0514]
a)设置操作区的偏移地址为操作组的组偏移地址列表的第“遍历索引(如index)”个元素的值;
[0515]
b)生成一个随机整数,要求生成的随机整数大于预设的最小值(如0)、小于“源文件大小+临时附加长度”(以字节为单位)。将得到的满足要求的随机整数作为操作区的目标偏移地址。
[0516]
c)生成一个随机整数,要求生成的随机整数大于预设的最小值(如0)、小于“(源文件大小+临时附加长度)乘以预设比例”,其中预设比例大于0且小于1。
[0517]
将得到的满足要求的随机整数作为操作区的操作长度
[0518]
d)判断操作区的“目标偏移地址+操作长度”是否超过“源文件大小+临时附加长度”,如果超过的话,将“源文件大小加临时附加长度”减去操作区的目标偏移地址的大小作为操作区的操作长度。
[0519]
e)更新扩展长度(如extend_len)为:原扩展长度+操作区的操作长度。
[0520]
(5)设置操作组的组类型二头结构:
[0521]
(5-1)将操作组的组长度与2进行取模运算,得到的值作为操作组的组类型二头结构的交换类型(如swap_type),其中0表示交换类型为偶数,1表示交换类型为奇数。
[0522]
(5-2)随机生成一个正整数,将该整数与2进行取模运算,得到的值作为操作组的组类型二头结构的交换操作模式(如swap_op_mode),其中0表示交换操作模式一,1表示交换操作模式二。
[0523]
(5-3)随机生成一个正整数,将该整数与3进行取模运算,得到的值作为操作组的组类型二头结构的配对模式(如swap_match_mode),其中0表示配对模式一,1表示配对模式二,2表示配对模式三。
[0524]
(5-4)如果交换类型(如swap_type)为奇数,则将操作组的组偏移地址列表作为操作组的组类型二头结构的奇数交换偏移地址列表。否则,交换类型是偶数,则将操作组的组偏移地址列表作为操作组的组类型二头结构的偶数交换偏移地址列表。
[0525]
(5-5)交换区长度(如swap_len)、实际配对数(如match_number)、奇数配对区列表和偶数配对区列表设置。具体来说:
[0526]
如果交换类型(如swap_type)为奇数:
[0527]
a)构建临时交换偏移地址列表:
[0528]
a-1)如果交换操作模式(如swap_op_mode)为类型交换操作模式一:
[0529]
临时交换偏移地址列表由奇数交换偏移地址列表构成。
[0530]
a-2)如果交换操作模式(如swap_op_mode)为类型交换操作模式二:
[0531]
临时交换偏移地址列表由在奇数交换偏移地址列表的首部和尾部各添加一个元素来构成。因此临时交换偏移地址列表的长度为:奇数交换偏移地址列表+2。并且:临时交换偏移地址列表的首部元素(即第1个元素)为:操作组的“组的头节点偏移地址”。临时交换偏移地址列表的尾部元素(即最后一个元素)为:操作组的“组的尾节点偏移地址"。
[0532]
b)按顺序将临时交换偏移地址列表中两两直接相邻的交换偏移地址相减,得到一组相邻差。得到的该组相邻差的长度为:临时交换偏移地址列表的长度-1。
[0533]
c)将得到的该组相邻差的最小值作为操作组的组类型二头结构的交换区长度(如swap_len)。
[0534]
d)将得到的该组相邻差的长度除以2并向下取整,作为操作组的组类型二头结构的实际配对数(如match_number)。
[0535]
e)奇数配对区列表按如下规则设置:
[0536]
e-1)如果配对模式(如swap_match_mode)为配对模式一:
[0537]
遍历奇数配对区列表,遍历索引(如index)从奇数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
[0538]
设置配对区元素的交换地址一为临时交换偏移地址列表中的第“遍历索引(如index)”个元素的值。
[0539]
设置配对区元素的交换地址二为临时交换偏移地址列表中的第“(临时交换偏移地址列表最后一个元素的索引)-1-遍历索引”个元素的值。
[0540]
e-2)如果配对模式(如swap_match_mode)为配对模式二:
[0541]
遍历奇数配对区列表,遍历索引(如index)从奇数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
[0542]
设置配对区元素的交换地址一为临时交换偏移地址列表中的第“2乘遍历索引(如index)”个元素的值。设置配对区元素的交换地址二为临时交换偏移地址列表中的第“2乘遍历索引(如index)+1”个元素的值。
[0543]
e-3)如果配对模式(如swap_match_mode)为配对模式三:
[0544]
设置随机选择列表的初值为:去除最后一个元素的临时交换偏移地址列表。因此该随机选择列表的初始长度为:临时交换偏移地址列表的长度-1。
[0545]
遍历奇数配对区列表,遍历索引(如index)从奇数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
[0546]
设置配对区元素的交换地址一为随机选择列表的第一个元素的值。
[0547]
生成一个随机正整数,将该整数与随机选择列表的长度进行取模运算,得到的值作为随机选择索引。如果随机选择索引为0(即第一个元素),则将随机选择索引加1。
[0548]
设置配对区元素的交换地址二为随机选择列表中随机选择索引位置的值。
[0549]
更新随机选择列表和随机选择列表的长度:将当前随机选择列表中除第一个元素和随机选择索引位置元素外的其他元素,按顺序构造一个新的随机选择列表,将该新的随机选择列表作为随机选择列表的新值。同时将“随机选择列表的长度-2”作为新的随机选择列表的长度。
[0550]
如果交换类型(如swap_type)为偶数:
[0551]
a)构建临时交换偏移地址列表:
[0552]
a-1)如果交换操作模式(如swap_op_mode)为类型交换操作模式一:
[0553]
临时交换偏移地址列表由在偶数交换偏移地址列表的首部添加一个元素来构成。因此临时交换偏移地址列表的长度为:偶数交换偏移地址列表+1。并且临时交换偏移地址列表的首部元素(即第1个元素)为:操作组的“组的头节点偏移地址”。
[0554]
a-2)如果交换操作模式(如swap_op_mode)为类型交换操作模式二:
[0555]
临时交换偏移地址列表由在偶数交换偏移地址列表的尾部添加一个元素来构成。因此临时交换偏移地址列表的长度为:偶数交换偏移地址列表+1。并且临时交换偏移地址列表的尾部元素(即最后一个元素)为:操作组的“组的尾节点偏移地址"。
[0556]
b)按顺序将临时交换偏移地址列表中两两直接相邻的交换偏移地址相减,得到一组相邻差。得到的该组相邻差的长度为:临时交换偏移地址列表的长度-1。
[0557]
c)将得到的该组相邻差的最小值作为操作组的组类型二头结构的交换区长度(如swap_len)。
[0558]
d)将得到的该组相邻差的长度除以2并向下取整,作为操作组的组类型二头结构的实际配对数(如match_number)。
[0559]
e)偶数配对区列表按如下规则设置:
[0560]
e-1)如果配对模式(如swap_match_mode)为配对模式一:
[0561]
遍历偶数配对区列表,遍历索引(如index)从偶数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
[0562]
设置配对区元素的交换地址一为临时交换偏移地址列表中的第“遍历索引(如index)”个元素的值。
[0563]
设置配对区元素的交换地址二为临时交换偏移地址列表中的第“(临时交换偏移地址列表最后一个元素的索引)-1-遍历索引”个元素的值。
[0564]
e-2)如果配对模式(如swap_match_mode)为配对模式二:
[0565]
遍历偶数配对区列表,遍历索引(如index)从偶数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
[0566]
设置配对区元素的交换地址一为临时交换偏移地址列表中的第“2乘遍历索引(如index)”个元素的值。
[0567]
设置配对区元素的交换地址二为临时交换偏移地址列表中的第“2乘遍历索引(如index)+1”个元素的值。
[0568]
e-3)如果配对模式(如swap_match_mode)为配对模式三:
[0569]
设置随机选择列表的初值为:去除最后一个元素的临时交换偏移地址列表。因此该随机选择列表的初始长度为:临时交换偏移地址列表的长度-1。
[0570]
遍历偶数配对区列表,遍历索引(如index)从偶数配对区列表的第一个元素开始(index=0),直到实际配对数(match_number-1)个元素。对于每一个配对区:
[0571]
设置配对区元素的交换地址一为随机选择列表的第一个元素的值。
[0572]
生成一个随机正整数,将该整数与随机选择列表的长度进行取模运算,得到的值作为随机选择索引。如果随机选择索引为0(即第一个元素),则将随机选择索引加1。
[0573]
设置配对区元素的交换地址二为随机选择列表中随机选择索引位置的值。
[0574]
更新随机选择列表和随机选择列表的长度:将当前随机选择列表中除第一个元素和随机选择索引位置元素外的其他元素,按顺序构造一个新的随机选择列表,将该新的随机选择列表作为随机选择列表的新值。同时将“随机选择列表的长度-2”作为新的随机选择列表的长度。
[0575]
在一些实施例中,根据上述构建的具体四种文件头部结构的对所述空的保护文件进行处理。
[0576]
例如,根据文件头部结构的操作区信息构建保护文件,根据文件头部结构的配对区信息构建保护文件,根据文件头部结构的操作组列表构建保护模文件,或者根据文件头部结构的叠加操作单元列表来构建保护文件。
[0577]
根据本公开的实施例,通过构建的文件头部结构对源文件进行随机破坏,并将随机破坏规则加密后写入源文件头部。由于对源文件进行随机破坏,因此针对同一个源文件,每次破坏的内容都不一样,从而破坏后的保护文件也不一样,最大限度提高源文件保护的机密性和安全性。同时,由于不对整个源文件进行加密,在实现对源文件进行保护的同时降低了对计算资源的需求。
[0578]
图2是示出根据本公开实施例的文件处理方法的流程图。如图2所示,该文件处理方法包括以下步骤s210至步骤s230。
[0579]
在步骤s210,接收受保护文件,所述受保护文件包括与经加密的文件头部结构相关联的第一信息和与根据所述文件头部结构对源文件进行处理而得到的经处理的源文件相关联的第二信息,所述文件头部结构包括将要对所述源文件执行的处理规则。
[0580]
在一些实施例中,所述处理规则包括随机破坏规则,所述经处理的源文件包括根据所述随机破坏规则对所述源文件进行随机破坏后的源文件。
[0581]
在步骤s220,基于预设的文件头部结构对所述受保护文件的所述第一信息进行校验。
[0582]
在一些本实施例中,如图3所示,基于预设的文件头部结构对所述受保护文件的所述第一信息进行校验包括以下步骤s221至步骤s223。
[0583]
在步骤s221,从所述受保护文件的头部得出所述经加密的文件头部结构。
[0584]
在步骤s222,使用预设的对称加密算法和密钥对所述经加密的文件头部结构进行解密。
[0585]
在步骤s223,基于预设的文件头部结构对经解密的文件头部结构进行校验。
[0586]
具体地,本实施例中,根据对文件头部结构加密的方式进行对应的校验。如本实施例上文提供的对文件头部结构加密的两种方式,本实施例对保护文件的头部进行校验对应采用以下第一种校验方式和第二种校验方式。
[0587]
1)第一种校验方式
[0588]
从保护文件的头部读出预设大小的辅助头部,判断辅助头部的魔幻数是否和预设的魔幻数相同:
[0589]
如果相同,则定位保护文件到辅助头部之后,根据辅助头部中的“加密后的文件头部结构的大小”读取指定大小的数据到临时缓冲区,作为加密的文件头部结构。将“辅助头部的预设大小”加上“加密后的文件头部结构的大小”作为文件临时头部长度(如
protected_model_header_len)。
[0590]
如果不相同,定位到保护文件的头部,读取预设大小的文件头部结构到临时缓冲区,作为加密的文件头部结构。将文件头部结构的预设大小作为文件临时头部长度(如protected_model_header_len)。
[0591]
2)第二种校验方式
[0592]
从保护文件的头部读出预设大小的辅助头部,判断辅助头部的魔幻数是否和预设的魔幻数相同:
[0593]
2-1)如果相同:
[0594]
a)则定位保护文件到辅助头部之后,根据辅助头部中的“加密后的基础头部的大小”读取指定大小的数据到临时缓冲区,作为加密的基础头部。定位保护文件到“辅助头部的预设大小+加密后的基础头部的大小”,同时根据辅助头部中的“加密后的叠加操作单元列表的大小”读取指定大小的数据到临时缓冲区,作为加密的叠加操作单元列表。
[0595]
b)将“辅助头部的预设大小+加密后的基础头部的大小+加密后的叠加操作单元列表的大小”作为文件临时头部长度(如protected_model_header_len)。
[0596]
c)使用预设的对称加密算法和密钥对临时缓冲区中的加密基础头部进行解密,得到解密后的基础头部。
[0597]
判断解密后的基础头部中的保护魔幻数是否和预设的保护魔幻数相同:如果相同,使用预设的对称加密算法和密钥对临时缓冲区中的叠加操作单元列表进行解密,得到解密后的叠加操作单元列表。否则提示无效文件,退出。
[0598]
(2-2)否则,说明辅助头部的魔幻数和预设的魔幻数不同,则:
[0599]
a)定位到保护文件的头部,读取预设大小的基础头部到临时缓冲区,作为加密的基础头部。
[0600]
b)使用预设的对称加密算法和密钥对临时缓冲区中的加密基础头部进行解密,得到解密后的基础头部。
[0601]
判断解密后的基础头部中的保护魔幻数是否和预设的保护魔幻数相同:如果不同,提示无效文件,退出;否则(说明相同):
[0602]
b-1)定位保护文件到基础头部之后,读取“基础头部中的实际叠加次数乘以基础头部中的叠加操作单元长度”大小的数据到临时缓冲区,作为加密的叠加操作单元列表。
[0603]
b-2)将基础头部的预设大小+“基础头部中的实际叠加次数乘以基础头部中的叠加操作单元长度”作为文件临时头部长度(如protected_model_header_len)。
[0604]
b-3)使用预设的对称加密算法和密钥对临时缓冲区中的叠加操作单元列表进行解密,得到解密后的叠加操作单元列表。
[0605]
随后,在步骤s230,响应于所述受保护文件的所述第一信息通过校验,基于所述受保护文件的所述第二信息得出所述源文件。
[0606]
在一些实施例中,如图4所示,基于所述受保护文件的所述第二信息得出所述源文件包括以下步骤s231和步骤s232。
[0607]
在步骤s231,从所述受保护文件的尾部得出所述经处理的源文件。
[0608]
在步骤s232,根据所述文件头部结构从所述经处理的源文件解码出所述源文件,并将所述源文件存储到目标缓冲区。
[0609]
此外,在一些实施例中,基于所述受保护文件的所述第二信息得出所述源文件包括:使用预设的对称加密算法和密钥对临时缓冲区中的加密文件头部结构进行解密,得到解密后的文件头部结构。判断解密后的文件头部结构中的保护魔幻数是否和预设的保护魔幻数相同:如果相同,预分配目标文件缓冲区,否则,提示无效文件,退出。
[0610]
图5显示为以源文件为ai源文件文件为例,采用本实施例中文件处理方法的实施过程。
[0611]
如图5所示,在对ai源模型文件进行保护时,获取ai源模型文件,创建空的ai保护模型文件,构建模型头部结构,对构建好的模型头部结构进行加密,并写入ai保护模型文件的头部,读取源模型,根据模型头部结构的信息构建ai保护模型文件,发布处理后的ai保护模型文件,用于实际部署。在想使用ai源模型文件时,对保护模型头部校验,从保护模型文件解码出原始模型,并存储到目标模型缓冲区。本实施例中的ai模型的保护过程中不对整个ai模型进行加密,而是对ai模型进行随机破坏,并将随机破坏规则加密后写入ai模型头部,由于对ai模型进行随机破坏,因此针对同一个ai模型,每次破坏的内容都不一样,从而破坏后的ai保护模型也不一样,从而最大限度的提高ai模型保护的机密性和安全性。同时由于不对整个ai模型进行加密,在实现对ai模型进行保护的同时降低了对计算资源的需求,特别是对部署于计算资源受限的端设备来说,提高了ai模型在推理前解保护的速度。本实施例的方法适用于对任意ai模型进行保护,对软硬件环境和场景不做限制,通用性强。
[0612]
如图6所示,本实施例提供一种电子设备101,电子设备101包括:处理器1001及存储器1002;所述存储器1002被配置为存储程序指令;所述处理器1001被配置为运行所述存储器1002存储的所述程序指令,以使所述电子设备101执行上述文件处理方法的各步骤。由于所述的文件处理方法的各步骤的具体实施过程已经在实施例1中进行了详细说明,在此不再赘述。
[0613]
处理器1001为cpu(central processing unit,中央处理器)。存储器1002通过系统总线与处理器1001连接并完成相互间的通信,存储器1002用于存储计算机程序,处理器1001用于运行计算机程序,以使所述处理器1001执行所述的所述的文件处理方法。存储器1002可能包含随机存取存储器(random access memory,简称ram),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
[0614]
此外,本实施例还提供一种计算机可读存储介质,其上存储有计算机可读程序指令,所述计算机程序被处理器1001执行时实现所述的所述的文件处理方法。上述已经对所述所述的文件处理方法进行了详细说明,在此不再赘述。
[0615]
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过计算机程序相关的硬件来完成。前述的计算机程序可以存储于一计算机可读存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
[0616]
综上所述,本技术不是对整个源文件(例如ai模型文件)进行加密,而是通过构建的文件头部结构对源文件进行随机破坏,并将随机破坏规则加密后写入源文件头部,由于对源文件进行随机破坏,因此针对同一个源文件,每次破坏的内容都不一样,从而破坏后的保护文件也不一样,从而最大限度的提高源文件保护的机密性和安全性。同时由于不对整个源文件进行加密,在实现对源文件进行保护的同时降低了对计算资源的需求,特别是对
部署于计算资源受限的端设备来说,提高了源文件在推理前解保护的速度。本技术的方法适用于对ai模型文件、各应用文档进行保护,对软硬件环境和场景不做限制,通用性强。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
[0617]
上述实施例仅例示性说明本技术的原理及其功效,而非用于限制本技术。任何熟悉此技术的人士皆可在不违背本技术的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本技术所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本技术的权利要求所涵盖。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1