CN113360858B - 一种功能开关数据处理的方法及系统 - Google Patents
一种功能开关数据处理的方法及系统 Download PDFInfo
- Publication number
- CN113360858B CN113360858B CN202010145158.3A CN202010145158A CN113360858B CN 113360858 B CN113360858 B CN 113360858B CN 202010145158 A CN202010145158 A CN 202010145158A CN 113360858 B CN113360858 B CN 113360858B
- Authority
- CN
- China
- Prior art keywords
- data
- switch
- buffer
- random
- random data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 97
- 238000012545 processing Methods 0.000 title claims abstract description 20
- 230000006870 function Effects 0.000 claims description 121
- 230000008569 process Effects 0.000 claims description 48
- 238000004364 calculation method Methods 0.000 claims description 34
- 230000008859 change Effects 0.000 claims description 25
- 238000004590 computer program Methods 0.000 claims description 7
- 238000004422 calculation algorithm Methods 0.000 description 7
- 238000012986 modification Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 238000005336 cracking Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 241000209202 Bromus secalinus Species 0.000 description 1
- 241000283986 Lepus Species 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012797 qualification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/565—Static detection by checking file integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
Abstract
本发明公开了一种功能开关数据处理的方法,由于开关数据是根据随机生成的多个随机数据而生成的,因此,开关数据也具有随机性,且每次生成功能开关时,随机数据重新随机生成,开关数据也跟着随机发生变化,无规律可循,因此,黑客难以进行破解;基于第一缓冲区中的所有数据生成的哈希结果,可校验整个第一缓冲区数据是否有被修改过,提高功能开关的安全性;对所述第一缓冲区进行加密,获得所述功能开关,通过加密,整个第一缓冲区格式则被覆盖掉,从而可以更好的隐蔽第一缓冲区的整个格式和内容,进一步提高功能开关的安全行。因此,本发明的方法可显著提高功能开关的安全性。
Description
技术领域
本发明涉及功能开关设计技术领域,尤其涉及一种功能开关数据处理的方法及系统。
背景技术
在程序中,通常通过功能开关来控制某个功能是否可用,以实现某些功能的管理。而现有的功能开关出于性能和编码的便捷性考虑通常使用简单的变量作为开关数据,黑客通过篡改功能开关的开关数据,则可以在未授权的前提下改变功能开关的开或关状态,存在极大的风险。例如,直播时发送弹幕,客户端会记录每次的弹幕间隔,只有大于时间间隔的才能发送,那么客户端在判断时间后则会有个功能开关来控制是否可以发送弹幕,那么黑客通过修改开关则可以实现无时间限制的随意发送弹幕。因此,现有的功能开关安全性低。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的功能开关数据处理的方法及系统。
一方面,本申请通过本申请的一实施例提供如下技术方案:
一种功能开关数据处理的方法,用于构造功能开关,所述功能开关包括多个数据,所述多个数据在第一缓冲区的存储顺序依次为第一个随机数据的大小、第一个随机数据、开关数据的大小、开关数据、当前时间戳、功能开关启动到当前时刻的总消耗时间、开关变化次数、第二个随机数据的大小、第二个随机数据、开关备份数据的大小、开关备份数据、第三个随机数据的大小、第三个随机数据和哈希结果数据;
所述方法包括:
获取当前进程ID、当前线程ID和当前时间戳;
基于所述当前进程ID、当前线程ID和当前时间戳,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小;
基于所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,申请内存,获得所述第一缓冲区;基于所述密钥数据的缓冲数据段大小,申请内存,获得第二缓冲区;
在所述第一缓冲区中随机生成所述第一个随机数据、第二个随机数据和第三个随机数据,并将所述当前时间戳以及所述功能开关的启动时间填充到所述第一缓冲区中,更新所述开关变化次数;
基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第一缓冲区中生成所述开关数据;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第二缓冲区生成密钥;
将所述开关数据加密获得的开关备份数据储存到所述第一缓冲区中;
对所述第一缓冲区中的所有数据进行哈希计算,获得所述哈希结果数据,并将所述哈希结果数据储存到所述第一缓冲区中;
利用所述密钥,对所述第一缓冲区进行加密,获得所述功能开关。
可选的,所述基于所述当前进程ID、当前线程ID和当前时间戳,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小,具体包括:
基于所述当前进程ID、当前线程ID和当前时间戳,以及分配内存的起始地址,获得种子数据;
基于所述种子数据,采用多个哈希计算,获得哈希数据;
基于所述哈希数据以及预设条件,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小。
可选的,所述基于所述当前进程ID、当前线程ID和当前时间戳,以及分配内存的起始地址,获得种子数据,具体包括:
采用如下公式计算获得种子数据:
seed=(ProcessID+ThreadID*ThreadID*ThreadID+Timestamp*Timestamp+pBuffMemoryStart*pBuffMemoryStart)/(K1+S1+S2+R1+R2+R3);
其中,seed表示种子数据,ProcessID表示当前进程ID,ThreadID表示当前线程ID,Timestamp表示当前时间戳,pBuffMemoryStart表示分配内存的起始地址,R1表示第一个随机数据的缓冲数据段大小变量标识,S1表示开关数据的缓冲数据段大小变量标识,R2表示第二个随机数据的缓冲数据段大小变量标识,S2表示开关备份数据的缓冲数据段大小变量标识,R3表示第三个随机数据的缓冲数据段大小变量标识,K1表示密钥数据的缓冲数据段大小变量标识。
可选的,所述基于所述种子数据,采用多个哈希计算,获得哈希数据,具体包括:
采用如下公式计算获得哈希数据:
HashResult=additiveHash.Create(seed)+rotatingHash.create(seed)+bernstein.create(seed)+RSHash.Create(seed);
其中,HashResult表示哈希数据,additiveHash表示加法哈希计算,rotatingHash是旋转哈希计算,bernstein是乘法哈希计算。
可选的,所述基于所述哈希数据以及预设条件,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小,具体包括:
采用如下公式计算获得所述密钥数据的缓冲数据段大小:K1=HashResult[0];
采用如下公式计算获得所述开关数据的缓冲数据段大小:S1=HashResult[1];
采用如下公式计算获得所述开关备份数据的缓冲数据段大小:S2=S1*HashResult[2];
采用如下公式计算获得所述第一个随机数据的缓冲数据段大小:R1=HashResult[3];
采用如下公式计算获得所述第二个随机数据的缓冲数据段大小:R2=HashResult[4];
采用如下公式计算获得所述第三个随机数据的缓冲数据段大小:R3=HashResult[5];
其中,HashResult[0]、HashResult[1]、HashResult[2]、HashResult[3]、HashResult[4]和HashResult[5]分别表示哈希数据中的元素;
且满足K1=16*N,N为大于等于1的正整数,小于等于30的正整数;S2=S1*M,M为大于等于1的正整数,小于等于10的正整数;R1、R2与R3互不相等。
可选的,在获得所述功能开关之后,所述方法还包括:
申请与所述第一缓冲区长度相等的第三缓冲区;
将所述第一缓冲区中的所述多个数据拷贝到所述第三缓冲区;
读取所述第三缓冲区中的所述多个数据,并对所述多个数据进行校验,以判断所述多个数据是否被篡改。
可选的,读取所述第三缓冲区中的所述多个数据,并对所述多个数据进行校验,以判断是否被篡改,具体包括:
对所述第三缓冲区中的所有数据进行哈希计算,获得哈希结果校验数据;
通过判断所述哈希结果校验数据与所述哈希结果数据是否一致,判断所述多个数据是否被篡改。
另一方面,本申请通过本申请的另一实施例提供一种功能开关数据处理的系统,用于构造功能开关,所述功能开关包括多个数据,所述多个数据在第一缓冲区的存储顺序依次为第一个随机数据的大小、第一个随机数据、开关数据的大小、开关数据、当前时间戳、功能开关启动到当前时刻的总消耗时间、开关变化次数、第二个随机数据的大小、第二个随机数据、开关备份数据的大小、开关备份数据、第三个随机数据的大小、第三个随机数据和哈希结果数据;
所述系统包括:
数据获取模块,用于获取当前进程ID、当前线程ID和当前时间戳;
第一获得模块,用于基于所述当前进程ID、当前线程ID和当前时间戳,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小;
第二获得模块,用于基于所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,申请内存,获得所述第一缓冲区;基于所述密钥数据的缓冲数据段大小,申请内存,获得第二缓冲区;
第三获得模块,用于在所述第一缓冲区中随机生成所述第一个随机数据、第二个随机数据和第三个随机数据,并将所述当前时间戳以及所述功能开关的启动时间填充到所述第一缓冲区中,更新所述开关变化次数;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第一缓冲区中生成所述开关数据;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第二缓冲区生成密钥;将所述开关数据加密获得的开关备份数据储存到所述第一缓冲区中;对所述第一缓冲区中的所有数据进行哈希计算,获得所述哈希结果数据,并将所述哈希结果数据储存到所述第一缓冲区中;利用所述密钥,对所述第一缓冲区进行加密,获得所述功能开关。
本发明公开了一种可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。
本发明公开了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述方法的步骤。
本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
在本发明的功能开关数据结构中,包括至少3个随机数据,为了避免被黑客破解,将实现开关功能的核心开关数据不存在开头位置,而是隐藏混淆到随机数据中,同时用当前时间戳、功能开关启动到当前时刻的总消耗时间、开关变化次数信息来保障缓冲区数据的变化性,变化性越大的缓冲区越能够起到对抗黑客逆向破解;此外,开关备份数据可实现开关的双保险,哈希结果数据可进行数据篡改的校验。基于上述功能开关的结构,为了实现第一缓冲区内部的所有数据是变化的,那么每次创建功能开关或是写入开关数据时,都会按照以下方法构造一个缓冲区,从而获得一个新的功能开关,因此,每次构造的数据都会发生变化。该方法具体包括:获取当前进程ID、当前线程ID和当前时间戳;于所述当前进程ID、当前线程ID和当前时间戳,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小;基于所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,申请内存,获得所述第一缓冲区;基于所述密钥数据的缓冲数据段大小,申请内存,获得第二缓冲区;在所述第一缓冲区中随机生成所述第一个随机数据、第二个随机数据和第三个随机数据,并将所述当前时间戳以及所述功能开关的启动时间填充到所述第一缓冲区中,更新所述开关变化次数;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第一缓冲区中生成所述开关数据;由于开关数据是根据随机生成的多个随机数据而生成的,因此,开关数据也具有随机性,且每次生成功能开关时,随机数据重新随机生成,开关数据也跟着随机发生变化,无规律可循,因此,黑客难以进行破解;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第二缓冲区生成密钥;所述开关数据加密获得的开关备份数据储存到所述第一缓冲区中;对所述第一缓冲区中的所有数据进行哈希计算,获得所述哈希结果数据,并将所述哈希结果数据储存到所述第一缓冲区中;基于第一缓冲区中的所有数据生成的哈希结果,可校验整个第一缓冲区数据是否有被修改过,提高功能开关的安全性;利用所述密钥,对所述第一缓冲区进行加密,获得所述功能开关,通过加密,整个第一缓冲区格式则被覆盖掉,从而可以更好的隐蔽第一缓冲区的整个格式和内容,进一步提高功能开关的安全行。因此,本发明的方法可显著提高功能开关的安全性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明一种实施例中的功能开关数据处理的方法流程图;
图2是本发明一种实施例中的功能开关数据处理的系统构架图。
具体实施方式
本申请实施例通过提供一种功能开关数据处理的方法及系统,解决了现有的功能开关安全性低的技术问题。
本申请实施例的技术方案为解决上述技术问题,总体思路如下:
一种功能开关数据处理的方法,用于构造功能开关,所述功能开关包括多个数据,所述多个数据在第一缓冲区的存储顺序依次为第一个随机数据的大小、第一个随机数据、开关数据的大小、开关数据、当前时间戳、功能开关启动到当前时刻的总消耗时间、开关变化次数、第二个随机数据的大小、第二个随机数据、开关备份数据的大小、开关备份数据、第三个随机数据的大小、第三个随机数据和哈希结果数据;所述方法包括:获取当前进程ID、当前线程ID和当前时间戳;基于所述当前进程ID、当前线程ID和当前时间戳,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小;基于所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,申请内存,获得所述第一缓冲区;基于所述密钥数据的缓冲数据段大小,申请内存,获得第二缓冲区;在所述第一缓冲区中随机生成所述第一个随机数据、第二个随机数据和第三个随机数据,并将所述当前时间戳以及所述功能开关的启动时间填充到所述第一缓冲区中,更新所述开关变化次数;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第一缓冲区中生成所述开关数据;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第二缓冲区生成密钥;将所述开关数据加密获得的开关备份数据储存到所述第一缓冲区中;对所述第一缓冲区中的所有数据进行哈希计算,获得所述哈希结果数据,并将所述哈希结果数据储存到所述第一缓冲区中;利用所述密钥,对所述第一缓冲区进行加密,获得所述功能开关。
为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。
首先说明,本文中出现的术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
在程序中,通常通过功能开关来控制某个功能是否可用,以实现某些功能的管理,因此,功能开关对于功能则很重要。而传统方法的开关则是出于性能和编码的便捷性考虑使用一个变量如果为1则说明功能可以用,为0则说明功能不可用。基于现有的功能开关,黑客很容易对其进行篡改,通过篡改功能开关则可以实现没有达成的功能可以使用,安全性低。例如,直播时发送弹幕,客户端会记录每次的弹幕间隔,只有大于时间间隔的才能发送,那么客户端在判断时间后则会有个功能开关来控制是否可以发送弹幕,那么黑客通过修改开关则可以实现无时间限制的随意发送弹幕。而由于功能开关的设计者一般都只关注功能开关的开关功能实现,而未考虑安全性问题,因此,现有的功能开关安全性低。
为此,本申请首先通过实施例一提供了一种功能开关数据处理的方法,以具体说明如何克服上述问题。
实施例一
本实施提供了一种功能开关数据处理的方法,用于构造功能开关,所述功能开关包括多个数据,所述多个数据在第一缓冲区的存储顺序依次为第一个随机数据的大小、第一个随机数据、开关数据的大小、开关数据、当前时间戳、功能开关启动到当前时刻的总消耗时间、开关变化次数、第二个随机数据的大小、第二个随机数据、开关备份数据的大小、开关备份数据、第三个随机数据的大小、第三个随机数据和哈希结果数据;
需要说明的是,为了生成一个功能开关,首先需要定义其数据结构。具体的,可以编写一个类来表示,以便对每个功能定义不同的开关。这样定义一个新的功能开关只需要创建一个类的实例即可。在本实施例中,定义一个类CSwitchData{
Uint8_t*pBuff;存储功能开关数据的第一缓冲区。
uint32_t buffsize;记录第一缓冲区的大小。
Uint8_t*pKey;存储密钥数据的第二缓冲区。
Uint32_t keysize;记录密钥数据的大小。}
其中,为了增加功能开关的数据复杂度,增加破解的难度,在本实施中,第一缓冲区中依次存储有上述的第一个随机数据的大小、第一个随机数据、开关数据的大小、开关数据、当前时间戳、功能开关启动到当前时刻的总消耗时间、开关变化次数、第二个随机数据的大小、第二个随机数据、开关备份数据的大小、开关备份数据、第三个随机数据的大小、第三个随机数据和哈希结果数据。
示例性的,pBuff=RandDataSize(第一个随机数据的大小)+RandData(第一个随机数据)+SwitchInfoSize(开关数据大小)+SwitchInfo(开关数据)+TimeStamp(当前时间戳)+TimeElapse(功能开关启动到当前时刻的总消耗时间)+SwitchChangeCount(开关变化次数)+RandDataSize(第二个随机数据的大小)+RandData(第二个随机数据)+SwitchInfoBackupSize(开关备份数据大小)+SwitchInfoBackup(开关备份数据)+RandDataSize(第三个随机数据的大小)+RandData(第三个随机数据)+HASH(哈希结果数据)。
需要说明的是,在第一缓冲区的数据结构中,至少包括3个随机数据,为了避免被黑客破解,将实现开关功能的核心开关数据不存在开头位置,而是隐藏混淆到随机数据中。可以理解的是,为了进一步增加数据的复杂性,对开关数据进行隐藏,随机数据也可以更多。用当前时间戳、功能开关启动到当前时刻的总消耗时间、开关变化次数信息来保障缓冲区数据的变化性,变化性越大的缓冲区越能够起到对抗黑客逆向破解;此外,开关备份数据可实现开关的双保险,哈希结果数据可进行数据篡改的校验。
基于上述功能开关的结构,为了实现第一缓冲区内部的所有数据是变化的,那么每次创建功能开关或是写入开关数据时,都会按照以下方法构造一个缓冲区,从而获得一个新的功能开关,因此,每次构造的数据都会发生变化。具体的,参见图1,所述方法包括:
S101、获取当前进程ID、当前线程ID和当前时间戳;
S102、基于所述当前进程ID、当前线程ID和当前时间戳,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小;
S103、基于所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,申请内存,获得所述第一缓冲区;基于所述密钥数据的缓冲数据段大小,申请内存,获得第二缓冲区;
S104、在所述第一缓冲区中随机生成所述第一个随机数据、第二个随机数据和第三个随机数据,并将所述当前时间戳以及所述功能开关的启动时间填充到所述第一缓冲区中,更新所述开关变化次数;
S105、基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第一缓冲区中生成所述开关数据;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第二缓冲区生成密钥;
S106、将所述开关数据加密获得的开关备份数据储存到所述第一缓冲区中;
S107、对所述第一缓冲区中的所有数据进行哈希计算,获得所述哈希结果数据,并将所述哈希结果数据储存到所述第一缓冲区中;
S108、利用所述密钥,对所述第一缓冲区进行加密,获得所述功能开关。
下面参照图1,对本实施中各步骤进行详细的解释说明。
根据前述描述,第一缓冲区的所有数据是可变化的,大小也是可变化的。而为了实现这种变化,在每次创建功能开关或是写入开关数据时,都需要重新构造缓冲区,且每次创建数据都会发生变化。
由于希望每次对功能开关的开关状态进行修改时功能开关的内部数据都不一样,同时,对于同一个功能开关程序的不同线程,执行算法也不一样。
为了实现数据的变化性,将整个第一缓冲区的构造算法放到功能开关的构造函数中,以保证每次都会执行缓冲区构造算法,重新构造缓冲区。
首先,需要执行步骤S101,获取当前进程ID、当前线程ID和当前时间戳。
获取当前进程ID、当前线程ID和当前时间戳的目的是:当前进程ID、当前线程ID后续计算种子数据,当前时间戳后续填入功能开关的数据结构中,作为变化数据。具体可通过以下GetCurrent函数继续获取:
DWORD ProcessID=GetCurrentProcessId();获取当前的进程ID;
DWORD ThreadID=GetCurrentThreadId();获取当前的线程ID。
接下来,执行S102,基于所述当前进程ID、当前线程ID和当前时间戳,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小。
需要说明的是,为了构造第一缓冲区,对第一缓冲区进行分配内存,需要需要首先计算得到第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小。
具体的,所述基于所述当前进程ID、当前线程ID和当前时间戳,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小,具体包括:
基于所述当前进程ID、当前线程ID和当前时间戳,以及分配内存的起始地址,获得种子数据;
基于所述种子数据,采用多个哈希计算,获得哈希数据;
基于所述哈希数据以及预设条件,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小。
在具体实施过程中,采用如下公式计算获得种子数据:
seed=(ProcessID+ThreadID*ThreadID*ThreadID+Timestamp*Timestamp+pBuffMemoryStart*pBuffMemoryStart)/(K1+S1+S2+R1+R2+R3);
其中,seed表示种子数据,ProcessID表示进程ID,ThreadID表示线程ID,Timestamp表示当前时间戳,pBuffMemoryStart表示分配内存的起始地址,R1表示第一个随机数据的缓冲数据段大小变量标识,S1表示开关数据的缓冲数据段大小变量标识,R2表示第二个随机数据的缓冲数据段大小变量标识,S2表示开关备份数据的缓冲数据段大小变量标识,R3表示第三个随机数据的缓冲数据段大小变量标识,K1表示密钥数据的缓冲数据段大小变量标识。
其中,种子数据由当前进程ID加当前线程ID的立方进行求和,为了扩大同一进程下不同的线程在使用这个开关缓冲区时产生更大的差异,从而平方则可以将差异放大化。同时,为了实现在不同时刻我们的种子数据进行变化,所以增加了当前时间戳的平方数据。而本实施例处于安全的考虑,考虑到在同一个线程中进程ID和线程ID是没有变化的,而唯一的变化量是时间戳,而如果时间戳也一致,会导致我们的种子数据一致。因此,考虑到使用第一缓冲区进行内存分配时,可以得到一个内存地址,而此内存地址则在本进程中是唯一的,并且每次分配内存,其地址都会发生变化。因此,本实施例中则使用缓冲区的分配内存的起始地址MemoryStart的平方做为一个计算因子。
此外,在上述公式中,分母则由上述的几个变量标识来组成。种子数据一旦确定,则可以生成我们的每一个数据。具体的,种子数据是一个数据,而我们需要的是6个数据,因此,本实施例使用一种单向的算法可以从一个数据生成出6个数据。而为了保障种子数据得到的数据的变化性,不采取使用单一的HASH算法,而是采取多个HASH来得到最终的数据。
具体的,采用如下公式计算获得哈希数据:
HashResult=additiveHash.Create(seed)+rotatingHash.create(seed)+bernstein.create(seed)+RSHash.Create(seed);
其中,HashResult表示哈希数据,additiveHash表示加法哈希计算,rotatingHash是旋转哈希计算,bernstein是乘法哈希计算。
得到哈希数据后,则可以从这样的哈希数据中选择需要的数据作为所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小。
具体的,所述基于所述哈希数据以及预设条件,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小,具体包括:
采用如下公式计算获得所述密钥数据的缓冲数据段大小:K1=HashResult[0];
采用如下公式计算获得所述开关数据的缓冲数据段大小:S1=HashResult[1];
采用如下公式计算获得所述开关备份数据的缓冲数据段大小:S2=S1*HashResult[2];
采用如下公式计算获得所述第一个随机数据的缓冲数据段大小:R1=HashResult[3];
采用如下公式计算获得所述第二个随机数据的缓冲数据段大小:R2=HashResult[4];
采用如下公式计算获得所述第三个随机数据的缓冲数据段大小:R3=HashResult[5];
其中,HashResult[0]、HashResult[1]、HashResult[2]、HashResult[3]、HashResult[4]和HashResult[5]分别表示哈希数据中的元素;
如果存在2个相邻的HashResult相同,我们则依次往后重新选择一个,从而得到所有需要的缓冲数据段大小。
需要说明的是,在获得缓冲数据段大小时,还需要满足以下条件:
且满足K1=16*N,N为大于等于1的正整数,小于等于30的正整数,由于其只是密钥的倍数,密钥只有16个字节,暂用空间不多,所以其可以适当的大一些;S2=S1*M,M为大于等于1的正整数,小于等于10的正整数;R1、R2与R3互不相等。其限定上限值的原因在于,避免浪费数据段太大,占用多余控件,浪费存储空间。
由于种子数据每次是变化的,因此,基于种子数据获得的哈希数据自然也是变化的,可保证每次计算获得的缓冲数据段大小是变化的。
有了上述缓冲数据段大小后,则可以生成我们的缓冲区数据。
而首先,需要执行S103,基于所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,申请内存,获得所述第一缓冲区;基于所述密钥数据的缓冲数据段大小,申请内存,获得第二缓冲区。
在具体实施过程中,可以利用内存动态分配函数Malloc,按照各数据段的大小分配内存,示例性的:pBuff=Malloc(R1+R2+R3+S1+S2)可获得第一缓冲区。
获得了第一缓冲区的大小,则可以生成密钥数据所在的第二缓冲区。
示例性的:pKey=Malloc(K1)。
在按照前述方法分配好了存储空间后,接下来对第一缓冲区内的数据进行生成。这里需要说明的是,这里的生成可以是数据的初始化,也可以是数据的更新,当首次生成功能开关时,则是数据的初始化,而对已有的功能开关写入开关数据时,则是数据的更新,但执行步骤都是一样的,都是需要每次重新构造缓冲区,并在缓冲区重新生成数据。
下面具体描述一下在缓冲区生成数据的过程。
接下来,执行S104,在所述第一缓冲区中随机生成所述第一个随机数据、第二个随机数据和第三个随机数据,并将所述当前时间戳以及所述功能开关的启动时间填充到所述第一缓冲区中,更新所述开关变化次数。
具体的,随机数据是使用随机函数来生成,在随机数据的缓冲数据段填充随机数据。
然后通过如下方式,填充当前时间戳数据:
pBuff[timeindex]=Time();获取系统时间填入当前时间戳位置,同时也填入程序启动的时间戳信息,并且将SwitchChangeCount初始化为0。
接下来,执行S105,基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第一缓冲区中生成所述开关数据;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第二缓冲区生成密钥。
在本实施例中,开关数据是从随机数据(至少包括第一个随机数据、第二个随机数据和第三个随机数据)中轮询做为开关数据,由于至少存在3个随机数据,而开关数据的长度和随机数据的长度可能不同,也可以相同,因此,每次选择随机数据时的算法如下:
如果随机数据R>开关数据S,即如果随机数据大于开关数据,则取R[0-SSize],从随机数据中取前面的数据长度;如果R<S,就是随机数据小于开关数据,此时,则取随机数据的整数倍重复拷贝到开关数据中,具体算法是:SwitchInfo[n*(R0-RSize)+R0-(SSize%R0Size)],其中n表示开关数据是随机数据的倍数,当剩下的数据不够一个随机数据时,则只拷贝其前面的数据。
同时,基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第二缓冲区生成密钥,以对第一缓冲区进行加密。
接下来,执行S106,将所述开关数据加密获得的开关备份数据储存到所述第一缓冲区中。
当开关数据拷贝完成后,对开关数据进行加密后存储到开关备份数据中进行加密隐藏起来,进一步增加数据安全性。
接下来,执行S107,对所述第一缓冲区中的所有数据进行哈希计算,获得所述哈希结果数据,并将所述哈希结果数据储存到所述第一缓冲区中。
HASH的目的是后续可以校验第一缓冲区数据是否有被修改过。在具体实施过程中,通过如下方式实现:
HASH[Md5[pBuff[0-hash]+pBuff[hash+hashsize-end]];其中,哈希结果数据是对整个pBuff来计算,但是们要排除掉哈希结果数据自身的空间。
接下来,执行S108,利用所述密钥,对所述第一缓冲区进行加密,获得所述功能开关。
在具体实施过程中,使用密钥数据来对整个pBuff缓冲区进行加密。
具体的,通过函数Encrpt[pBuff,pKey]进行加密,通过加密,第一缓冲区格式则被覆盖掉,从而可以更好的隐蔽和隐藏缓冲区的整个格式和内容的安全。
作为一种可选的实施方式,在获得所述功能开关之后,所述方法还包括:
申请与所述第一缓冲区长度相等的第三缓冲区;
将所述第一缓冲区中的所述多个数据拷贝到所述第三缓冲区;
读取所述第三缓冲区中的所述多个数据,并对所述多个数据进行校验,以判断所述多个数据是否被篡改。
具体的,读取所述第三缓冲区中的所述多个数据,并对所述多个数据进行校验,以判断是否被篡改,具体包括:
对所述第三缓冲区中的所有数据进行哈希计算,获得哈希结果校验数据;
通过判断所述哈希结果校验数据与所述哈希结果数据是否一致,判断所述多个数据是否被篡改。
需要说明的是,当需要访问开关数据时(以就是需要知道当前开关是打开的还是关闭的),由于第一缓冲区进行了密钥加密,那么首先需要对第一缓冲区进行解密得到里面的开关数据,从而判断开关是打开还是关闭。在本实施例中,考虑到读取开关的频率可能会很高,而写入开关的频率相对来说会低一些,因此我们则对于读取开关我们不做修改,而对于写入开关时,整个开关数据的第一缓冲区会重新生成,全部发生生变化。但处于安全的考虑,在读取功能开关时,是重新生成一段第三缓冲区,将所有数据拷贝过去,并且在第三缓冲区中进行数据读取,而原始缓冲区不进行任何变化。这样的好处是可以对原始缓冲区进行安全保护,且在读取缓冲区后,可以被删除掉,而不需要考虑后续还会使用。具体实现如下:
pBuffCopy=Malloc(pBuffSize);分配和第一缓冲区一样的长度内存的第三缓冲区。
Memcpy(pBuffCopy,pBuff,pBuffSize);将所有数据拷贝到第三缓冲区中。
然后我们对第三缓冲区进行解密并读取开关数据。
具体通过Decrpt[pBuffCopy,pKey]进行解密,读取第三缓冲区的开关数据。
同时,在读取的过程中可以对数据进行校验,并将校验结果进行上报到服务器,服务器可以依据校验结果判断客户端是否存在作弊等情况。具体的校验和上报过程如下:
首先,校验第三缓冲区整体计算获得的HASH值是否与第一缓冲区存储的哈希结果数据一致,若不一致,则表示第一缓冲区数据被修改,上报异常,上报数据类型可以是:
Enmum eSwitch_Type{
eSwitch_Normal=0,直接获取开关数据的值。
eSwitch_Backup=1,开关备份数据的值。
eSwitch_Query=2,查询开关数据的值。
eSwitch_Hash=3,开关数据的hash值。
eSwitch_Count=4,记录开关的变化次数。
}。
其次,读取第三缓冲区的开关数据SwitchInfo,以及变化次数SwitchChangeCount,依据SwitchChangeCount来判断当前的开关数据对应的随机数据是哪一个,然后判断二者是否相等,不相等开关为false,相等开关为true。
然后,读取完开关后,还需要对开关备份数据进行校验,校验开关备份数据是否与开关数据一致,不一致则我们上报服务器此数据异常eSwitch_Backup。每次读取完功能开关,我们都会上报开关数据eSwitch_Normal到服务器。服务器对于一些开关数据是可以判断客户端是否能有资格打开这个开关的功能。
此外,需要说明的是,当程序中需要对开关数据进行修改时,例如,该用户具备了某种资格,可以使用对应的开关功能,那么,此时则需要将功能开关的开关数据设置为打开。而在功能打开的时候,为了开关数据的安全性,也可以重新生成一个缓冲区,并且对于缓冲区的生成,可以复用本实施例中的方法,就是重新生成一个开关缓冲区,从而所有的数据全部重新生成,而旧的缓冲区则会进行释放内存操作。同时,缓冲区变化次数会记录SwitchChangeCount当前的变化次数。
此外,为了进一步提高功能开关的安全性,不仅仅在访问开关的时候进行数据的上报和检测,还可以设置定时对功能开关进行检测和上报的机制,参照前述的数据读取和上报方法,来查看客户端是否存在修改开关的行为。
上述本申请实施例中的技术方案,至少具有如下的技术效果或优点:
本实施例的方法,用于构造功能开关,所述功能开关包括多个数据,所述多个数据在第一缓冲区的存储顺序依次为第一个随机数据的大小、第一个随机数据、开关数据的大小、开关数据、当前时间戳、功能开关启动到当前时刻的总消耗时间、开关变化次数、第二个随机数据的大小、第二个随机数据、开关备份数据的大小、开关备份数据、第三个随机数据的大小、第三个随机数据和哈希结果数据;在本发明的功能开关数据结构中,包括至少3个随机数据,为了避免被黑客破解,将实现开关功能的核心开关数据不存在开头位置,而是隐藏混淆到随机数据中,同时用当前时间戳、功能开关启动到当前时刻的总消耗时间、开关变化次数信息来保障缓冲区数据的变化性,变化性越大的缓冲区越能够起到对抗黑客逆向破解;此外,开关备份数据可实现开关的双保险,哈希结果数据可进行数据篡改的校验。基于上述功能开关的结构,为了实现第一缓冲区内部的所有数据是变化的,那么每次创建功能开关或是写入开关数据时,都会按照以下方法构造一个缓冲区,从而获得一个新的功能开关,因此,每次构造的数据都会发生变化。该方法具体包括:获取当前进程ID、当前线程ID和当前时间戳;于所述当前进程ID、当前线程ID和当前时间戳,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小;基于所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,申请内存,获得所述第一缓冲区;基于所述密钥数据的缓冲数据段大小,申请内存,获得第二缓冲区;在所述第一缓冲区中随机生成所述第一个随机数据、第二个随机数据和第三个随机数据,并将所述当前时间戳以及所述功能开关的启动时间填充到所述第一缓冲区中,更新所述开关变化次数;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第一缓冲区中生成所述开关数据;由于开关数据是根据随机生成的多个随机数据而生成的,因此,开关数据也具有随机性,且每次生成功能开关时,随机数据重新随机生成,开关数据也跟着随机发生变化,无规律可循,因此,黑客难以进行破解;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第二缓冲区生成密钥;所述开关数据加密获得的开关备份数据储存到所述第一缓冲区中;对所述第一缓冲区中的所有数据进行哈希计算,获得所述哈希结果数据,并将所述哈希结果数据储存到所述第一缓冲区中;基于第一缓冲区中的所有数据生成的哈希结果,可校验整个第一缓冲区数据是否有被修改过,提高功能开关的安全性;利用所述密钥,对所述第一缓冲区进行加密,获得所述功能开关,通过加密,整个第一缓冲区格式则被覆盖掉,从而可以更好的隐蔽第一缓冲区的整个格式和内容,进一步提高功能开关的安全行。因此,本发明的方法可显著提高功能开关的安全性。
实施例二
基于与实施例一同样的发明构思,本实施例提供一种功能开关数据处理的系统,用于构造功能开关,所述功能开关包括多个数据,所述多个数据在第一缓冲区的存储顺序依次为第一个随机数据的大小、第一个随机数据、开关数据的大小、开关数据、当前时间戳、功能开关启动到当前时刻的总消耗时间、开关变化次数、第二个随机数据的大小、第二个随机数据、开关备份数据的大小、开关备份数据、第三个随机数据的大小、第三个随机数据和哈希结果数据;
参见图2,所述系统包括:
数据获取模块,用于获取当前进程ID、当前线程ID和当前时间戳;
第一获得模块,用于基于所述当前进程ID、当前线程ID和当前时间戳,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小;
第二获得模块,用于基于所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,申请内存,获得所述第一缓冲区;基于所述密钥数据的缓冲数据段大小,申请内存,获得第二缓冲区;
第三获得模块,用于在所述第一缓冲区中随机生成所述第一个随机数据、第二个随机数据和第三个随机数据,并将所述当前时间戳以及所述功能开关的启动时间填充到所述第一缓冲区中,更新所述开关变化次数;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第一缓冲区中生成所述开关数据;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第二缓冲区生成密钥;将所述开关数据加密获得的开关备份数据储存到所述第一缓冲区中;对所述第一缓冲区中的所有数据进行哈希计算,获得所述哈希结果数据,并将所述哈希结果数据储存到所述第一缓冲区中;利用所述密钥,对所述第一缓冲区进行加密,获得所述功能开关。
由于本实施例所介绍的数据处理的系统为实现本申请实施例一种功能开关数据处理的方法所采用的系统,故而基于本申请实施例一中所介绍的功能开关数据处理的方法,本领域所属技术人员能够了解本实施例的系统的具体实施方式以及其各种变化形式,所以在此对于如何利用本中的系统实现实施例一中的方法不再详细介绍。只要本领域所属技术人员用于实现本申请实施例中功能开关数据处理的方法所采用的系统,都属于本申请所欲保护的范围。
基于与前述实施例中同样的发明构思,本发明实施例还提供一种可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前文任一所述方法的步骤。
基于与前述实施例中同样的发明构思,本发明实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现前文任一所述方法的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种功能开关数据处理的方法,其特征在于,用于构造功能开关,所述功能开关包括多个数据,所述多个数据在第一缓冲区的存储顺序依次为第一个随机数据的大小、第一个随机数据、开关数据的大小、开关数据、当前时间戳、功能开关启动到当前时刻的总消耗时间、开关变化次数、第二个随机数据的大小、第二个随机数据、开关备份数据的大小、开关备份数据、第三个随机数据的大小、第三个随机数据和哈希结果数据;
所述方法包括:
获取当前进程ID、当前线程ID和当前时间戳;
基于所述当前进程ID、当前线程ID和当前时间戳,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小;
基于所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,申请内存,获得所述第一缓冲区;基于所述密钥数据的缓冲数据段大小,申请内存,获得第二缓冲区;
在所述第一缓冲区中随机生成所述第一个随机数据、第二个随机数据和第三个随机数据,并将所述当前时间戳以及所述功能开关的启动时间填充到所述第一缓冲区中,更新所述开关变化次数;
基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第一缓冲区中生成所述开关数据;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第二缓冲区生成密钥;
将所述开关数据加密获得的开关备份数据储存到所述第一缓冲区中;
对所述第一缓冲区中的所有数据进行哈希计算,获得所述哈希结果数据,并将所述哈希结果数据储存到所述第一缓冲区中;
利用所述密钥,对所述第一缓冲区进行加密,获得所述功能开关。
2.如权利要求1所述的方法,其特征在于,所述基于所述当前进程ID、当前线程ID和当前时间戳,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小,具体包括:
基于所述当前进程ID、当前线程ID和当前时间戳,以及分配内存的起始地址,获得种子数据;
基于所述种子数据,采用多个哈希计算,获得哈希数据;
基于所述哈希数据以及预设条件,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小。
3.如权利要求2所述的方法,其特征在于,所述基于所述当前进程ID、当前线程ID和当前时间戳,以及分配内存的起始地址,获得种子数据,具体包括:
采用如下公式计算获得种子数据:
seed=(ProcessID+ThreadID*ThreadID*ThreadID+Timestamp*Timestamp+pBuffMemoryStart*pBuffMemoryStart)/(K1+S1+S2+R1+R2+R3);
其中,seed表示种子数据,ProcessID表示当前进程ID,ThreadID表示当前线程ID,Timestamp表示当前时间戳,pBuffMemoryStart表示分配内存的起始地址,R1表示第一个随机数据的缓冲数据段大小变量标识,S1表示开关数据的缓冲数据段大小变量标识,R2表示第二个随机数据的缓冲数据段大小变量标识,S2表示开关备份数据的缓冲数据段大小变量标识,R3表示第三个随机数据的缓冲数据段大小变量标识,K1表示密钥数据的缓冲数据段大小变量标识。
4.如权利要求3所述的方法,其特征在于,所述基于所述种子数据,采用多个哈希计算,获得哈希数据,具体包括:
采用如下公式计算获得哈希数据:
HashResult=additiveHash.Create(seed)+rotatingHash.create(seed)+bernstein.create(seed)+RSHash.Create(seed);
其中,HashResult表示哈希数据,additiveHash表示加法哈希计算,rotatingHash是旋转哈希计算,bernstein是乘法哈希计算。
5.如权利要求4所述的方法,其特征在于,所述基于所述哈希数据以及预设条件,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小,具体包括:
采用如下公式计算获得所述密钥数据的缓冲数据段大小:K1=HashResult[0];
采用如下公式计算获得所述开关数据的缓冲数据段大小:S1=HashResult[1];
采用如下公式计算获得所述开关备份数据的缓冲数据段大小:S2=S1*HashResult[2];
采用如下公式计算获得所述第一个随机数据的缓冲数据段大小:R1=HashResult[3];
采用如下公式计算获得所述第二个随机数据的缓冲数据段大小:R2=HashResult[4];
采用如下公式计算获得所述第三个随机数据的缓冲数据段大小:R3=HashResult[5];
其中,HashResult[0]、HashResult[1]、HashResult[2]、HashResult[3]、HashResult[4]和HashResult[5]分别表示哈希数据中的元素;
且满足K1=16*N,N为大于等于1的正整数,小于等于30的正整数;S2=S1*M,M为大于等于1的正整数,小于等于10的正整数;R1、R2与R3互不相等。
6.如权利要求1所述的方法,其特征在于,在获得所述功能开关之后,所述方法还包括:
申请与所述第一缓冲区长度相等的第三缓冲区;
将所述第一缓冲区中的所述多个数据拷贝到所述第三缓冲区;
读取所述第三缓冲区中的所述多个数据,并对所述多个数据进行校验,以判断所述多个数据是否被篡改。
7.如权利要求6所述的方法,其特征在于,读取所述第二缓冲区中的所述多个数据,并对所述多个数据进行校验,以判断是否被篡改,具体包括:
对所述第三缓冲区中的所有数据进行哈希计算,获得哈希结果校验数据;
通过判断所述哈希结果校验数据与所述哈希结果数据是否一致,判断所述多个数据是否被篡改。
8.一种功能开关数据处理的系统,其特征在于,用于构造功能开关,所述功能开关包括多个数据,所述多个数据在第一缓冲区的存储顺序依次为第一个随机数据的大小、第一个随机数据、开关数据的大小、开关数据、当前时间戳、功能开关启动到当前时刻的总消耗时间、开关变化次数、第二个随机数据的大小、第二个随机数据、开关备份数据的大小、开关备份数据、第三个随机数据的大小、第三个随机数据和哈希结果数据;
所述系统包括:
数据获取模块,用于获取当前进程ID、当前线程ID和当前时间戳;
第一获得模块,用于基于所述当前进程ID、当前线程ID和当前时间戳,获得所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,以及密钥数据的缓冲数据段大小;
第二获得模块,用于基于所述第一个随机数据、第二个随机数据、第三个随机数据、开关数据和开关备份数据的缓冲数据段大小,申请内存,获得所述第一缓冲区;基于所述密钥数据的缓冲数据段大小,申请内存,获得第二缓冲区;
第三获得模块,用于在所述第一缓冲区中随机生成所述第一个随机数据、第二个随机数据和第三个随机数据,并将所述当前时间戳以及所述功能开关的启动时间填充到所述第一缓冲区中,更新所述开关变化次数;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第一缓冲区中生成所述开关数据;基于所述第一个随机数据、第二个随机数据和第三个随机数据,在所述第二缓冲区生成密钥;将所述开关数据加密获得的开关备份数据储存到所述第一缓冲区中;对所述第一缓冲区中的所有数据进行哈希计算,获得所述哈希结果数据,并将所述哈希结果数据储存到所述第一缓冲区中;利用所述密钥,对所述第一缓冲区进行加密,获得所述功能开关。
9.一种可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-7任一项所述方法的步骤。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1-7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010145158.3A CN113360858B (zh) | 2020-03-04 | 2020-03-04 | 一种功能开关数据处理的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010145158.3A CN113360858B (zh) | 2020-03-04 | 2020-03-04 | 一种功能开关数据处理的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113360858A CN113360858A (zh) | 2021-09-07 |
CN113360858B true CN113360858B (zh) | 2022-09-09 |
Family
ID=77523444
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010145158.3A Active CN113360858B (zh) | 2020-03-04 | 2020-03-04 | 一种功能开关数据处理的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113360858B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107622207A (zh) * | 2016-07-15 | 2018-01-23 | 希捷科技有限公司 | 加密系统级数据结构 |
US10154031B1 (en) * | 2017-06-12 | 2018-12-11 | Ironclad Encryption Corporation | User-wearable secured devices provided assuring authentication and validation of data storage and transmission |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7260555B2 (en) * | 2001-12-12 | 2007-08-21 | Guardian Data Storage, Llc | Method and architecture for providing pervasive security to digital assets |
WO2013105960A1 (en) * | 2012-01-12 | 2013-07-18 | Fusion-Io, Inc. | Systems and methods for managing cache admission |
CN107306183B (zh) * | 2016-04-22 | 2021-12-21 | 索尼公司 | 客户端、服务端、方法和身份验证系统 |
CN106059750B (zh) * | 2016-05-20 | 2019-08-27 | 广东工业大学 | 一种基于中文哈希的加解密方法 |
CN109214180B (zh) * | 2017-06-30 | 2021-04-27 | 武汉斗鱼网络科技有限公司 | 一种内存代码的校验方法及装置 |
CN108809516B (zh) * | 2018-05-17 | 2020-12-11 | 杭州安恒信息技术股份有限公司 | 一种格式化数据脱敏的高安全性编码解码方法 |
-
2020
- 2020-03-04 CN CN202010145158.3A patent/CN113360858B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107622207A (zh) * | 2016-07-15 | 2018-01-23 | 希捷科技有限公司 | 加密系统级数据结构 |
US10154031B1 (en) * | 2017-06-12 | 2018-12-11 | Ironclad Encryption Corporation | User-wearable secured devices provided assuring authentication and validation of data storage and transmission |
Also Published As
Publication number | Publication date |
---|---|
CN113360858A (zh) | 2021-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ren et al. | Design space exploration and optimization of path oblivious ram in secure processors | |
Blass et al. | Toward robust hidden volumes using write-only oblivious ram | |
Fletcher et al. | A secure processor architecture for encrypted computation on untrusted programs | |
US7350040B2 (en) | Method and system for securing metadata to detect unauthorized access | |
CN105431862B (zh) | 针对存储器控制器的密钥旋转 | |
Aguilera et al. | {Block-Level} Security for {Network-Attached} Disks | |
CN109558740A (zh) | 用于页面粒度、软件控制的多密钥存储器加密的系统、装置和方法 | |
US11139959B2 (en) | Stream ciphers for digital storage encryption | |
CN101917403B (zh) | 一种用于密文存储的分布式密钥管理方法 | |
US20060020941A1 (en) | Multitask execution system | |
CN106446705A (zh) | 一种基于区块链的数据循环写入方法及系统 | |
US20170366527A1 (en) | Method and System for an Efficient Shared-Derived Secret Provisioning Mechanism | |
US20060089936A1 (en) | System and method for a secure, scalable wide area file system | |
JP2001508893A (ja) | 暗号によって保護されたページング・システム | |
Peters et al. | DEFY: A deniable, encrypted file system for log-structured storage | |
US9928385B2 (en) | Periodic memory refresh in a secure computing system | |
CN110912892B (zh) | 一种证书管理方法、装置、电子设备及存储介质 | |
CN104598827B (zh) | 硬件协助的操作系统重启计数器设计方法 | |
WO2024045407A1 (zh) | 虚拟磁盘安全存储方法 | |
Zhou et al. | Hiding data accesses in steganographic file system | |
CN113360858B (zh) | 一种功能开关数据处理的方法及系统 | |
RU2584755C2 (ru) | Способ защиты доступности и конфиденциальности хранимых данных и система настраиваемой защиты хранимых данных | |
CN113515773A (zh) | 一种应用于单片机系统的图像内容保护模块及方法 | |
CN109104272A (zh) | 私钥保存方法、系统及计算机可读存储介质 | |
Kong et al. | A reconfigurable byzantine quorum approach for the agile store |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
EE01 | Entry into force of recordation of patent licensing contract | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20210907 Assignee: Yidu Lehuo Network Technology Co.,Ltd. Assignor: WUHAN DOUYU NETWORK TECHNOLOGY Co.,Ltd. Contract record no.: X2023980041384 Denomination of invention: A Method and System for Data Processing of Functional Switches Granted publication date: 20220909 License type: Common License Record date: 20230908 |