CN107315539B - 一种数据存储方法以及数据提取方法 - Google Patents
一种数据存储方法以及数据提取方法 Download PDFInfo
- Publication number
- CN107315539B CN107315539B CN201710333521.2A CN201710333521A CN107315539B CN 107315539 B CN107315539 B CN 107315539B CN 201710333521 A CN201710333521 A CN 201710333521A CN 107315539 B CN107315539 B CN 107315539B
- Authority
- CN
- China
- Prior art keywords
- data
- storing
- storage
- extracted
- leaf
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/062—Securing storage systems
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0816—Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
- H04L9/0819—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
- H04L9/083—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) involving central third party, e.g. key distribution center [KDC] or trusted third party [TTP]
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/30—Compression, e.g. Merkle-Damgard construction
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Databases & Information Systems (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种数据存储方法以及数据提取方法,在存储时,先确定出存储数据,并利用STL容器套嵌STL容器的方式形成树状结构,再在叶子节点中存储存储数据。而在存储时,利用上一个用于存储存储数据的叶子节点的键值,确定出下一个用于存储存储数据的叶子节点的键值,进而确定出所有用于存储存储数据的叶子节点各自的键值;再根据所有用于存储存储数据的叶子节点各自的键值,将存储数据对应存储到所有用于存储存储数据的叶子节点中。由于本发明的存储数据不是连续存储,而是存储在不同的叶子节点中,从而使得其数据存储结构更为复杂。那么即使被黑客攻击,也不会向现有技术中会获取到所有的存储数据,极大的保护了数据的安全性。
Description
技术领域
本申请涉及数据安全保护技术领域,尤其涉及一种数据存储方法以及数据提取方法。
背景技术
目前,在客户端的程序开发中,会使用到一些关键的数据,而对这些数据的保护则是该算法是否安全的关键点。
例如,对于一个应用程序来说,其用户的登录密码则是非常重要的,或者其数据解密时使用的KEY(密码、密钥)值也是非常重要,其KEY值的安全则决定了该数据的安全性。
目前,通常的做法是使用分配的一块连续的内存空间来存储其KEY值,然后对该连续的内存空间的数据进行加密,那么对于有逆向调试技术的HACK(黑客)来说,则可以通过设置调试断点来在加密前获取到该KEY值存储在内存空间的地址,则读取该地址的内容就是该KEY值的内容,在加密前获取到该值,所以绕过了加密,所以从逆向分析的角度来说,其数据使用连续的内存空间存储是不安全的。
例如图1,是一个顺序存储结构图,其中数据a1,a2…ai-1在内存中挨着存储,那么获取到数据a1的地址,则可以很轻易的获取到a2…ai-1的地址。并且一旦HACK通过设置内存断点,查看内存则一下可以看到内存中存储的数据内容。
因此,需要一种更为复杂的数据存储方法,该数据的存储和读取都会比较复杂,那么即使HACK获取到了该数据的内存地址,不知道其数据的存储结构,也是无法获取到整个数据的。
发明内容
本发明了提供了一种数据存储方法以及数据提取方法,以解决能够获取到整个存储数据的技术问题。
为解决上述技术问题,本发明提供了一种数据存储方法,所述方法包括:
确定出需要存储的存储数据;
利用STL容器套嵌STL容器的方式形成一树状结构;
在所述树状结构中,确定出上一个用于存储所述存储数据的叶子节点的键值;
基于所述上一个用于存储所述存储数据的叶子节点的键值,确定出下一个用于存储所述存储数据的叶子节点的键值,进而确定出所有用于存储所述存储数据的叶子节点各自的键值;
根据所有用于存储所述存储数据的叶子节点各自的键值,将所述存储数据对应存储到所有用于存储所述存储数据的叶子节点中。
优选的,对所述存储数据进行加密。
优选的,所述对所述存储数据进行加密,包括:
利用TEA加密算法对所述存储数据进行加密。
优选的,当所述上一个用于存储所述存储数据的叶子节点为首个上一个用于存储所述存储数据的叶子节点时,所述确定出上一个用于存储所述存储数据的叶子节点的键值,包括:
确定一初始键值;
将所述初始键值进行哈希得到首个用于存储所述存储数据的叶子节点的键值。
优选的,所述根据所有用于存储所述存储数据的叶子节点各自的键值,将所述存储数据对应存储到所有用于存储所述存储数据的叶子节点中,包括:
确定出所有用于存储所述存储数据的叶子节点各自的第一存储子数据;其中,所有用于存储所述存储数据的叶子节点各自的第一存储子数据合并为所述存储数据;
将所述所有用于存储所述存储数据的叶子节点各自的键值和各自的第一存储子数据,作为各自的第二存储子数据;
将所述所有用于存储所述存储数据的叶子节点各自的键值和各自的第二存储子数据一并存储在对应的叶子节点中。
优选的,所述根据所有用于存储所述存储数据的叶子节点各自的键值,将所述存储数据对应存储到所有用于所述存储数据的叶子节点中之后,还包括:
将所有用于存储所述存储数据的叶子节点的地址对应存储到对应的上一层父节点中。
优选的,所述将所有用于存储所述存储数据的叶子节点的地址对应存储到对应的上一层父节点中之后,包括:
再将对应的上一层父节点地址存储到各自对应的上一层父节点中。
本发明公开了一种数据提取的方法,所述方法包括:
确定出树状结构中的所有用于存储提取数据的叶子节点;其中,所述树状结构利用STL容器套嵌STL容器的方式形成;
确定出所有用于存储提取数据的叶子节点的键值,然后对应提取出所述提取数据;其中,在所有用于存储所述提取数据的叶子节点中,后一个用于存储提取数据的叶子节点的键值是通过前一个用于存储所述提取数据的叶子节点的键值进行确认。
优选的,所述确定出所有用于存储提取数据的叶子节点的键值,然后对应提取出所述提取数据,包括:
在所述所有用于存储提取数据的叶子节点中,确定出待提取叶子节点;
基于所述待提取叶子节点的前一个用于存储所述提取数据的待提取叶子节点的键值确定出所述待提取叶子节点的键值;
基于所述待提取叶子节点的键值,提取出对应的第二存储子数据;
在所述第二存储子数据中,基于所述待提取叶子节点的键值提取出的对应的第一存储子数据,其中,所有用于存储提取数据的叶子节点中存储的第一存储子数据合并为所述提取数据。
优选的,所述基于所述待提取叶子节点的键值提取出的对应的第一存储子数据之后,还包括:
对所述待提取叶子节点的对应的第一存储子数据进行解密。
通过本发明的一个或者多个技术方案,本发明具有以下有益效果或者优点:
本发明公开了一种数据存储方法以及数据提取方法,该数据存储方法包括:先确定出存储数据,并利用STL容器套嵌STL容器的方式形成一树状结构,然后在叶子节点中存储所述存储数据。而在存储时,利用上一个用于存储所述存储数据的叶子节点的键值,确定出下一个用于存储所述存储数据的叶子节点的键值,进而确定出所有用于存储所述存储数据的叶子节点各自的键值;然后根据所有用于存储所述存储数据的叶子节点各自的键值,将所述存储数据对应存储到所有用于存储所述存储数据的叶子节点中。由于本发明的存储数据并不是连续存储,而是存储在不同的叶子节点中,从而使得其数据存储结构更为复杂。那么即使被黑客攻击,也不会向现有技术中所呈现的会获取到所有的存储数据,极大的保护了数据的安全性。
进一步的,叶子节点则存储实际的数据,分支节点则存储下一个分支的地址。从而即使HACK获取到内存地址,不知道数据的存储结构他也无法获取整个数据。所以可以极大的保护数据的安全性。
进一步的,本发明的存储数据事先还会进行加密,增加数据的安全性。
进一步的,本发明的叶子节点采用嵌套式结构存储数据,即先将叶子节点的键值和实际的存储数据作为第一存储子数据,然后再将键值和第一存储子数据作为第二存储子数据一并存入叶子节点中,故而即便获取到叶子节点,不知道叶子节点的这种存储结构也无法获取整个数据。所以可以极大的保护数据的安全性。
附图说明
图1为一个顺序存储结构图;
图2为本发明实施例中数据存储方法的流程图;
图3为本发明实施例中树状结构图;
图4为本发明实施例中数据提取方法的流程图。
具体实施方式
本发明实施例公开了一种数据存储方法,是基于STL容器(也叫STLset容器,是一个计算机科学领域中的重要概念,描述一个控制变长元素序列的对象)来对数据进行加密存储保护的方法。该方法的实施原理是:本发明则使用套嵌的STL容器来存储整个数据。其中,STL容器中的MAP容器则是使用树状结构来存储数据,树中只有叶子节点才存储数据,而分支节点则存储叶子节点的地址。
鉴于此,本发明则使用MAP容器套嵌MAP容器来存储数据,使得其存储和读取都不是连续存储,从而使得其数据存储结构更为复杂。
另外,本发明还会编写一个数据存储的接口和数据读取的接口,使得使用者非常方便,对于使用者则是透明的。从而在程序任意一处下断点都无法获取到该KEY值的明文。从而提高逆向分析者的门槛,极大的保护数据存储的安全性。
本发明使用基于STL容器套嵌来实现复杂数据结构来存储数据。其中,可以使用的STL容器包括map容器、list容器、multimap容器。容器(Container)的概念的出现早于模板(template),它原本是一个计算机科学领域中的一个重要概念,但在这里,它的概念和STL混合在一起了。下面是在STL中出现的7种容器:
vector(向量)--STL中标准而安全的数组。只能在vector的"前面"增加数据。
deque(双端队列double-ended queue)--在功能上和vector相似,但是可以在前后两端向其中添加数据。
list(列表)--游标一次只可以移动一步。如果你对链表已经很熟悉,那么STL中的list则是一个双向链表(每个节点有指向前驱和指向后继的两个指针)。
set(集合)--包含了经过排序了的数据,这些数据的值(value)必须是唯一的。
map(映射)--经过排序了的二元组的集合,map中的每个元素都是由两个值组成,其中的key(键值,一个map中的键值必须是唯一的)是在排序或搜索时使用,它的值可以在容器中重新获取;而另一个值是该元素关联的数值。比如,除了可以ar[43]="overripe"这样找到一个数据,map还可以通过ar["banana"]="overripe"这样的方法找到一个数据。如果你想获得其中的元素信息,通过输入元素的全名就可以轻松实现。
multiset(多重集)--和集合(set)相似,然而其中的值不要求必须是唯一的(即可以有重复)。
multimap(多重映射)--和映射(map)相似,然而其中的键值不要求必须是唯一的(即可以有重复)。
本发明则使用组合的形式来使用,如map容器中再存储map,同时对存储是原始数据进行加密,从而进一步的保护了数据的安全性。当然,其他的容器也可以,本发明仅使用MAP容器为例。
通常的数据存储结构是分配一处连续的存储空间来存储数据,如使用内存分配函数char*pData=(char*)malloc(DataLength),那么其分配的内存空间pData则是一片连续的存储空间,其存储的数据会是连续的,使得一旦获取到pData的内存地址那么则可以获取到整个pData的内容。假设pData存储了一个字符串“datakey”。那么对应到内存中则也是:“datakey”,数据挨个存储。
而本申请到从逆向的角度进行实施,在HACK(黑客)即使获取到数据存储的地址后,也无法或者整个数据,因为数据的存储不是使用的连续存储空间,而是使用一种树状结构,树中有多个分支,和叶子节点,叶子节点则存储实际的数据,分支节点则存储下一个分支的地址。从而即使HACK获取到内存地址,不知道数据的存储结构他也无法获取整个数据。所以可以极大的保护数据的安全性。
为了使本申请所属技术领域中的技术人员更清楚地理解本申请,下面结合附图,通过具体实施例对本申请技术方案作详细描述。
参看图2,本发明的数据存储方法,包括:
步骤11,确定出需要存储的存储数据。
本发明的存储数据不限制类型和数据量,例如可以是视频数据、音频数据,也可以为字符串等等,在此本发明不做限制。
在确定出需要存储的存储数据之后,可对所述存储数据进行加密。对存储数据的加密使用何种算法,本发明不做限制,故而本发明可以使用任意加密算法对存储数据进行加密,例如。利用TEA加密算法对所述存储数据进行加密。
步骤12,利用STL容器套嵌STL容器的方式形成一树状结构。
在具体的实施过程中,本发明使用MAP容器套嵌MAP容器来存储数据,而在STL容器中,MAP容器本身是以树状结构来存储数据,本发明为了使得数据更为复杂则使用了MAP容器套嵌MAP容器,即MAP容器再存储MAP容器,来形成树状结构。
在树状结构中,叶子节点用来存储数据,而分支机构中的节点只是用来存储地址。而在每一个叶子节点中,都使用了MAP容器来存储数据。下面介绍MAP容器的定义:
map<int,map<int,int>>MapMapData;
其中,对于map容器,第一个参数是其的健值,第二个则是其健值对应的数据,通过健值则可以找到对应的数据。本发明的第一个map其存储的是另一个map对象,而第二个map中的健值对应的则是本发明的实际的存储数据。
例如,Map<key1,map<key2,data>>,其中key1和key2则都是健值,实际data则是最终要存储的数据。而这种存储方法每次只存储数据串中的一个数据,对于整个数据串则一个一个的存储,而读取时也是使用一个一个的读取,从而没有地方可以获取到整个数据串的内容。
参看图3,为一树状结构图。其中,叶子节点A、E、R、X则存储的是具体的存储数据。而对于分支节点和根节点H、C、S则是存储的叶子节点的地址。所以黑客获取到根节点H的地址,但是不知道其数据怎么存储的话是无法读取到叶子节点A、E、R、X的数据的。
当然,此处的三层数状结构仅作举例,实际应用中,本发明还可以有多层例如4层、5层等等的树状结构。
步骤13,在所述树状结构中,确定出上一个用于存储所述存储数据的叶子节点的键值。
在具体的实施过程中,若上一个用于存储所述存储数据的叶子节点为首个用于存储所述存储数据的叶子节点,那么,首个用于存储所述存储数据的叶子节点的键值是通过下面的步骤确定的:确定一初始键值;将所述初始键值进行哈希得到首个用于存储所述存储数据的叶子节点的键值。例如,将CRC32HASH做为其HASH(哈希)算法。若初始键值是“A”,那么其计算HASH后则得到0xD3D99E8B,那么0xD3D99E8B则做为首个用于存储所述存储数据的叶子节点的键值。当然,哈希算法还可以有其他。
步骤14,基于所述上一个用于存储所述存储数据的叶子节点的键值,确定出下一个用于存储所述存储数据的叶子节点的键值,进而确定出所有用于存储所述存储数据的叶子节点各自的键值。
具体的实施过程中,是将上一个用于存储所述存储数据的叶子节点的键值进行哈希得到下一个用于存储所述存储数据的叶子节点的键值,以此类推,则可以得到所有用于存储所述存储数据的叶子节点各自的键值。
步骤15,根据所有用于存储所述存储数据的叶子节点各自的键值,将所述存储数据对应存储到所有用于存储所述存储数据的叶子节点中。
在具体的实施过程中,本发明在每个叶子节点中存储数据时都是按照MAP容器的定义进行数据存储。当然,还可能存在这种情况,就是数据存储时不会用到所有的叶子节点,本发明就针对那些用于存储数据的叶子节点。
为了提高存取数据的效率,基于MAP技术的底层实现,会根据数据量和数据动态调整叶子节点的顺序和层级(即深度,深度表示的是叶子节点的层数。叶子节点的层数越多,表示叶子节点的深度越大),当然,层级也会影响存取数据的效率,层级越少,提取数据的效率越高。
而在叶子节点存储数据的过程中,首先确定出所有用于存储所述存储数据的叶子节点各自的第一存储子数据。其中,所有用于存储所述存储数据的叶子节点各自的第一存储子数据合并为所述存储数据;
其次,将所述所有用于存储所述存储数据的叶子节点各自的键值和各自的第一存储子数据,作为各自的第二存储子数据。
最后,将所述所有用于存储所述存储数据的叶子节点各自的键值和各自的第二存储子数据一并存储在对应的叶子节点中。
下面以首个用于存储所述存储数据的叶子节点存储数据的过程为例,其他叶子节点的存储数据的过程相似。
本发明从存储数据中取出一部分作为第一存储子数据。然后,将首个用于存储所述存储数据的叶子节点的键值和第一存储子数据一并作为第二存储子数据。然后再将首个用于存储所述存储数据的叶子节点的键值和第二存储子数据一并出入首个用于存储所述存储数据的叶子节点中。
此后,可对首个用于存储所述存储数据的叶子节点的键值进行哈希,得到第二个用于存储所述存储数据的叶子节点的键值。然后再从存储数据中取出部分数据,存储到第二个用于存储所述存储数据的叶子节点中。当然,对于第二个用于存储所述存储数据的叶子节点的存储过程也和首个用于存储所述存储数据的叶子节点的存储过程相同,只是键值和存储的数据有差别而已。
当然,也可以先将存储数据进行划分,然后在得到各个叶子节点的键值之后,在进行存储。存储也可以是随机存储、按数据量大小、按类型等等方式进行分配存储。但是存储在叶子节点的具体过程是和上述类似的,故而本发明在此不再赘述。
作为一种可选的实施例,在根据所有用于存储所述存储数据的叶子节点各自的键值,将所述存储数据对应存储到所有用于所述存储数据的叶子节之后,还包括:将所有用于存储所述存储数据的叶子节点的地址对应存储到对应的上一层父节点中。
作为一种可选的实施例,在将所有用于存储所述存储数据的叶子节点的地址对应存储到对应的上一层父节点中之后,再将对应的上一层父节点地址存储到各自对应的上一层父节点中。
在下面的实施例,本发明举例进行说明。
本发明使用了MAP套嵌MAP的方式来存储每一个数据,并且对存储的数据进行加密后存储,本发明则编写一个数据存储接口提供对使用者比较方便接口来存储重要数据。
本发明对于MAP中存储的健值的生成则使用一个初始的健值,然后每次存储一次数据则对健值计算一次HASH,做为下一个节点在数据存储时的健值。因为HASH算法对一个初始值计算HASH会得到固定的值做为下一个HASH数据的输入得到下一个健值。
本发明使用CRC32HASH做为其HASH算法。例如:初始值是“A”那么其计算HASH后则得到0xD3D99E8B,那么0xD3D99E8B则做为第一个数据的健值,对于下个数据存储时其健值则使用0xD3D99E8B计算HASH后的值做为健值。使用此方法可以使得健值本身也是比较复杂的,比直接使用1,2,3更为复杂,因为其看不到任何规律。
具体接口void CacheData(int data)实现如下:
m_Key=“A”;
首先初始化m_Key的值为“A”。
void CacheData(int data)
其接口是存储一个数据的接口,其参数data则为实际要存储的数据。
{
m_Key=Crc32hash(m_Key);
首先使用Crc32hash算法来对m_Key计算其的HASH值,并且结果保存到m_Key中。
map<int,int>mapData;
创建一个map对象来存储独立的数据。
encryptData=TEA.encrypt(data,m_Key);
使用TEA加密算法来对数据data进行加密。
mapData[m_Key]=encryptData;
将数据存储在创建的map对象中,其中健值是m_Key,健值对应的数据是使用TEA加密算法加密后的数据encryptData。
m_mapData[m_Key]=mapData;
然后继续使用健值m_Key来将整个map对象存储在另一个map对象中,其中健值是m_Key,健值对应的数据则是一个map对象。
}
本接口则提供一个数据的存储,对于存储多个数据,则可以对每个数据分别调用该接口来存储。
基于同一种发明构思,本发明还公开了一种数据提取的方法,和上述数据存储方法相对应。
在此方法中,提取数据和上述公开的存储数据本质上是相同的,只是为了叙述便利,故而在此改为提取数据。而本发明的第一提取子数据对应上文中的第一存储子数据,第二提取子数据对应本发明的第二提取子数据。而用于存储提取数据的叶子节点对应上文中的用于存储存储数据的叶子节点。
参看图4,在具体的实施过程中,该方法包括:
步骤41,确定出树状结构中的所有用于存储提取数据的叶子节点;其中,所述树状结构利用STL容器套嵌STL容器的方式形成。
步骤42,确定出所有用于存储提取数据的叶子节点的键值,然后对应提取出所述提取数据。
其中,在所有用于存储所述提取数据的叶子节点中,后一个用于存储提取数据的叶子节点的键值是通过前一个用于存储所述提取数据的叶子节点的键值进行确认。
当然,在首个存储所述提取数据的叶子节点的键值是通过对初始键值哈希获得的。
在具体的实施过程中,所述确定出所有用于存储提取数据的叶子节点的键值,然后对应提取出所述提取数据,包括:
在所述所有用于存储提取数据的叶子节点中,确定出待提取叶子节点;
基于所述待提取叶子节点的前一个用于存储所述提取数据的待提取叶子节点的键值确定出所述待提取叶子节点的键值;
基于所述待提取叶子节点的键值,提取出对应的第二存储子数据;
在所述第二存储子数据中,基于所述待提取叶子节点的键值提取出的对应的第一存储子数据,其中,所有用于存储提取数据的叶子节点中存储的第一存储子数据合并为所述提取数据。
而在所述基于所述待提取叶子节点的键值提取出的对应的第一存储子数据之后,还包括:对所述待提取叶子节点的对应的第一存储子数据进行解密。
下面举例进行说明。
当将数据存储在树状结构中之后,而在使用到该数据的地方则需要读取该数据,所以需要编写一个接口用于读取存储的数据。在存储时是使用了一个初始化的KEY值做为数据存储的健值,而对后续数据的健值的生成则使用对前一个健值计算HASH值,而读取时也按照此种方法则可以读取到每个数据。具体接口int GetData(int no)实现如下:
其中返回值则是获取到的最终的值,其中参数no则是标示其在整个存储数据中的序号,第一个数据其序号是0,第二个数据其序号是1依次类推。
首先使用一个for循环语句来计算该序号的时候其m_Key值。MapMapData_const_itr itr=m_mapData.find(m_Key);
然后从第一个MAP中找到其存储的子MAP对象,查找则调用MAP自身提供的find函数,并使用健值m_Key来查找。找到后则返回值则是该子map对象。
map<int,int>::const_iterator it2=(*itr).second.find(m_Key);
然后在子对象map中再一次使用find函数来查找,查找的健值还是使用同样的m_Key,其中查找到的结果it2.second中的健值对应的数据则是最终的结果。
Encryptdata=it2.second;
最后则需要对数据进行解密,之前存储时使用TEA加密算法来加密,则现在使用对应的解密算法来解密数据。
Data=TEA.decrypt(Encryptdata,m_Key);
则Data则是得到的原始数据。如果对于获取整个数据,则可以依次的传入序号从0开始一直获取到整个数据。
通过本发明的一个或者多个实施例,本发明具有以下有益效果或者优点:
本发明公开了一种数据存储方法以及数据提取方法,该数据存储方法包括:先确定出存储数据,并利用STL容器套嵌STL容器的方式形成一树状结构,然后在叶子节点中存储所述存储数据。而在存储时,利用上一个用于存储所述存储数据的叶子节点的键值,确定出下一个用于存储所述存储数据的叶子节点的键值,进而确定出所有用于存储所述存储数据的叶子节点各自的键值;然后根据所有用于存储所述存储数据的叶子节点各自的键值,将所述存储数据对应存储到所有用于存储所述存储数据的叶子节点中。由于本发明的存储数据并不是连续存储,而是存储在不同的叶子节点中,从而使得其数据存储结构更为复杂。那么即使被黑客攻击,也不会向现有技术中所呈现的会获取到所有的存储数据,极大的保护了数据的安全性。
进一步的,叶子节点则存储实际的数据,分支节点则存储下一个分支的地址。从而即使HACK获取到内存地址,不知道数据的存储结构他也无法获取整个数据。所以可以极大的保护数据的安全性。
进一步的,本发明的存储数据事先还会进行加密,增加数据的安全性。
进一步的,本发明的叶子节点采用嵌套式结构存储数据,即先将叶子节点的键值和实际的存储数据作为第一存储子数据,然后再将键值和第一存储子数据作为第二存储子数据一并存入叶子节点中,故而即便获取到叶子节点,不知道叶子节点的这种存储结构也无法获取整个数据。所以可以极大的保护数据的安全性。
尽管已描述了本申请的优选实施例,但本领域内的普通技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种数据存储方法,其特征在于,所述方法包括:
确定出需要存储的存储数据;
利用描述一个控制变长元素序列的对象容器STL容器套嵌STL容器的方式形成一树状结构;
在所述树状结构中,确定出上一个用于存储所述存储数据的叶子节点的键值,所述树状结构中只有叶子节点存储数据,分支节点存储叶子节点的地址;
基于所述上一个用于存储所述存储数据的叶子节点的键值,确定出下一个用于存储所述存储数据的叶子节点的键值,进而确定出所有用于存储所述存储数据的叶子节点各自的键值;
根据所有用于存储所述存储数据的叶子节点各自的键值,将所述存储数据对应存储到所有用于存储所述存储数据的叶子节点中。
2.如权利要求1所述的方法,其特征在于,
对所述存储数据进行加密。
3.如权利要求2所述的方法,其特征在于,所述对所述存储数据进行加密,包括:
利用TEA加密算法对所述存储数据进行加密。
4.如权利要求1所述的方法,其特征在于,当所述上一个用于存储所述存储数据的叶子节点为首个上一个用于存储所述存储数据的叶子节点时,所述确定出上一个用于存储所述存储数据的叶子节点的键值,包括:
确定一初始键值;
将所述初始键值进行哈希得到首个用于存储所述存储数据的叶子节点的键值。
5.如权利要求1所述的方法,其特征在于,所述根据所有用于存储所述存储数据的叶子节点各自的键值,将所述存储数据对应存储到所有用于存储所述存储数据的叶子节点中,包括:
确定出所有用于存储所述存储数据的叶子节点各自的第一存储子数据;其中,所有用于存储所述存储数据的叶子节点各自的第一存储子数据合并为所述存储数据;
将所述所有用于存储所述存储数据的叶子节点各自的键值和各自的第一存储子数据,作为各自的第二存储子数据;
将所述所有用于存储所述存储数据的叶子节点各自的键值和各自的第二存储子数据一并存储在对应的叶子节点中。
6.如权利要求1所述的方法,其特征在于,所述根据所有用于存储所述存储数据的叶子节点各自的键值,将所述存储数据对应存储到所有用于所述存储数据的叶子节点中之后,还包括:
将所有用于存储所述存储数据的叶子节点的地址对应存储到对应的上一层父节点中。
7.如权利要求6所述的方法,其特征在于,所述将所有用于存储所述存储数据的叶子节点的地址对应存储到对应的上一层父节点中之后,包括:
再将对应的上一层父节点地址存储到各自对应的上一层父节点中。
8.一种数据提取的方法,其特征在于,所述方法包括:
确定出树状结构中的所有用于存储提取数据的叶子节点;其中,所述树状结构利用STL容器套嵌STL容器的方式形成,所述树状结构中只有叶子节点存储数据,分支节点存储叶子节点的地址;
确定出所有用于存储提取数据的叶子节点的键值,然后对应提取出所述提取数据;其中,在所有用于存储所述提取数据的叶子节点中,后一个用于存储提取数据的叶子节点的键值是通过前一个用于存储所述提取数据的叶子节点的键值进行确认。
9.如权利要求8所述的方法,其特征在于,所述确定出所有用于存储提取数据的叶子节点的键值,然后对应提取出所述提取数据,包括:
在所述所有用于存储提取数据的叶子节点中,确定出待提取叶子节点;
基于所述待提取叶子节点的前一个用于存储所述提取数据的待提取叶子节点的键值确定出所述待提取叶子节点的键值;
基于所述待提取叶子节点的键值,提取出对应的第二存储子数据;
在所述第二存储子数据中,基于所述待提取叶子节点的键值提取出的对应的第一存储子数据,其中,所有用于存储提取数据的叶子节点中存储的第一存储子数据合并为所述提取数据。
10.如权利要求9所述的方法,其特征在于,所述基于所述待提取叶子节点的键值提取出的对应的第一存储子数据之后,还包括:
对所述待提取叶子节点的对应的第一存储子数据进行解密。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710333521.2A CN107315539B (zh) | 2017-05-12 | 2017-05-12 | 一种数据存储方法以及数据提取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710333521.2A CN107315539B (zh) | 2017-05-12 | 2017-05-12 | 一种数据存储方法以及数据提取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107315539A CN107315539A (zh) | 2017-11-03 |
CN107315539B true CN107315539B (zh) | 2020-08-04 |
Family
ID=60181548
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710333521.2A Active CN107315539B (zh) | 2017-05-12 | 2017-05-12 | 一种数据存储方法以及数据提取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107315539B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110019979A (zh) * | 2017-11-20 | 2019-07-16 | 北京京东尚科信息技术有限公司 | 提醒方法和装置 |
CN108446376B (zh) * | 2018-03-16 | 2022-04-08 | 众安信息技术服务有限公司 | 数据存储方法与装置 |
CN109033278B (zh) * | 2018-07-11 | 2020-09-08 | 江苏通付盾科技有限公司 | 数据处理方法、装置、电子设备及计算机存储介质 |
CN111475510A (zh) * | 2020-04-03 | 2020-07-31 | 弦子科技(北京)有限公司 | 一种基于树状结构的数据同步方法、装置、系统及设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101883130A (zh) * | 2009-05-07 | 2010-11-10 | 华为技术有限公司 | 页面流会话信息的保存方法及装置 |
CN102402545A (zh) * | 2010-09-14 | 2012-04-04 | 腾讯科技(深圳)有限公司 | 一种存储数据的方法及装置 |
CN105653668A (zh) * | 2015-12-29 | 2016-06-08 | 武汉理工大学 | 云环境中基于DOMTree的网页内容分析提取优化方法 |
CN106021501A (zh) * | 2016-05-20 | 2016-10-12 | 天脉聚源(北京)传媒科技有限公司 | 一种数据存储方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20130049117A (ko) * | 2011-11-03 | 2013-05-13 | 한국전자통신연구원 | 메모리 기반의 서머리 벡터를 구비한 인덱스 구조의 데이터 검색 장치 및 방법 |
-
2017
- 2017-05-12 CN CN201710333521.2A patent/CN107315539B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101883130A (zh) * | 2009-05-07 | 2010-11-10 | 华为技术有限公司 | 页面流会话信息的保存方法及装置 |
CN102402545A (zh) * | 2010-09-14 | 2012-04-04 | 腾讯科技(深圳)有限公司 | 一种存储数据的方法及装置 |
CN105653668A (zh) * | 2015-12-29 | 2016-06-08 | 武汉理工大学 | 云环境中基于DOMTree的网页内容分析提取优化方法 |
CN106021501A (zh) * | 2016-05-20 | 2016-10-12 | 天脉聚源(北京)传媒科技有限公司 | 一种数据存储方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107315539A (zh) | 2017-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11709948B1 (en) | Systems and methods for generation of secure indexes for cryptographically-secure queries | |
US10778441B2 (en) | Redactable document signatures | |
Mishra et al. | Oblix: An efficient oblivious search index | |
Demertzis et al. | Dynamic searchable encryption with small client storage | |
US11726993B1 (en) | Systems and methods for cryptographically-secure queries using filters generated by multiple parties | |
CN107315539B (zh) | 一种数据存储方法以及数据提取方法 | |
US8429720B2 (en) | Method and apparatus for camouflaging of data, information and functional transformations | |
US7454782B2 (en) | Method and system for camouflaging access-controlled data | |
CN116894273B (zh) | 基于异或和求余的文件加密方法、解密方法、设备及介质 | |
CN103414555A (zh) | 阵列基于io块加密的密钥管理方法 | |
CN111898157B (zh) | 机器学习多源训练集的不经意存储访问方法 | |
US11669601B2 (en) | Digital watermarking for textual data | |
CN113722366A (zh) | 一种基于不经意密文倒排索引的安全数据检索方法 | |
CN112966294B (zh) | 一种单轮交互的链表oram访问方法 | |
CN108897994B (zh) | 隐藏导入表的方法、装置、存储介质和计算机设备 | |
US11669506B2 (en) | Searchable encryption | |
CN117708878B (zh) | 基于oram带隐私保护功能的版权信息可信检索方法 | |
Sion et al. | Conjunctive keyword search on encrypted data with completeness and computational privacy | |
Wolfe et al. | Optimizing Path ORAM for Cloud Storage Applications | |
Archana et al. | Enhancing the Security of Data Stored in the Cloud using customized Data Visualization Patterns | |
CN115905210A (zh) | 数据库系统和数据库处理方法 | |
KR101382628B1 (ko) | 데이터베이스 암호화 시스템 및 방법 | |
Joseph et al. | Efficient search on encrypted data | |
Chen et al. | Oblix: An Efficient Oblivious Search Index | |
CN116089976A (zh) | 关系型数据库的管理方法及装置 |
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 |