一种基于数据库的积木式动态加密方法.pdf

上传人:a2 文档编号:177901 上传时间:2018-01-31 格式:PDF 页数:8 大小:448.83KB
返回 下载 相关 举报
摘要
申请专利号:

CN201410439845.0

申请日:

2014.09.01

公开号:

CN104252604A

公开日:

2014.12.31

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 21/62申请日:20140901|||公开

IPC分类号:

G06F21/62(2013.01)I; G06F17/30

主分类号:

G06F21/62

申请人:

苏州锐盾信息科技有限公司

发明人:

罗喜召

地址:

215000 江苏省苏州市苏州工业园区仁爱路199号B07号楼302单元

优先权:

专利代理机构:

苏州广正知识产权代理有限公司 32234

代理人:

刘述生

PDF下载: PDF下载
内容摘要

本发明公开了一种基于数据库的积木式动态加密方法,包括以下步骤:(1)布鲁姆滤波器的实现;(2)为明文添加随机字符串;(3)加密;(4)解密。通过上述方式,本发明基于数据库的积木式动态加密方法具有能够利用数据库原本就有的查询优化技术进行密文的查找和计算,并且不需要过多的更改原有应用程序连接数据库部分的代码,同时数据库管理员无法获得明文信息等优点,在基于数据库的积木式动态加密方法的普及上有着广泛的市场前景。

权利要求书

1.  一种基于数据库的积木式动态加密方法,其特征在于,包括以下步骤:
(1)布鲁姆滤波器的实现:
(a)自定义一个结构体BLOOM,结构体内声明了位数组的大小asize、用于表示布鲁姆滤波器的位数组a、所用的哈希函数个数nfuncs、以及指向所有用到的哈希函数的函数指针funcs,这些哈希函数传入const char*类型的参数并输出unsigned int类型的结果,这里用typedef unsigned int (*hashfunc_t)(const char *)来声明一个指向所需哈希函数的函数指针类型hashfunc_t;
(b)编写创建布鲁姆滤波器的函数BLOOM *bloom_create(int size, int nfuncs, ...),根据传入的size来确定位数组大小、传入的nfuncs来确定哈希函数的个数,使用var_start和var_end来处理动态个数的参数列表,得到所有哈希函数指针;
(c)编写销毁布鲁姆滤波器的函数int bloom_destroy(BLOOM *bloom),用于在完成布鲁姆滤波器运算后,及时销毁堆中的内存,防止内存泄露;
(d)编写添加元素的函数int bloom_add(BLOOM *bloom, const char *s),用于向指定的bloom中添加字符串元素s;
(e)编写检查元素是否属于布鲁姆滤波器的函数int bloom_check(BLOOM *bloom, const char *s),使用bloom中指向哈希函数的函数指针,依次计算s的哈希值并检查位数组上相应的数值,如果为0,返回false;
(2)为明文添加随机字符串:
(f)利用OpenSSL提供的函数int  RAND_bytes(unsigned char *buf,int num)来产生5个随机数;
(g)将产生的随机数转换成相应的16进制字符串,生成1个长度为10的Hex字符串;
(3)加密:
(h)使用步骤(1)中实现的代码生成布鲁姆滤波器;
(i)计算明文长度,生成长度计数器;
(j)使用步骤(2)中实现的代码生成随机字符串,并接在明文后面生成最终带加密字符串;
(k)利用OpenSSL提供的API,加密步骤(j)得到的字符串;
(l)将步骤(h)、(j)、(k)中得到的字符串组合在一起,形成最终密文;
(4)解密:
(m)忽略密文的布鲁姆滤波器部分,按照步骤(3)加密时的组合顺序提取出明文计数器和密文,解密密文后,截取明文计数器指示的明文长度,得到最终明文。

2.
  根据权利要求1所述的基于数据库的积木式动态加密方法,其特征在于,步骤(3)、(4)中设定了两个密钥:主密钥MasterKey和工作密钥SessionKey,其中主密钥MasterKey由开发人员和用户#define在代码中共同协定,用来加密工作密钥,工作密钥SessionKey用于加密数据,通过AES128算法,以密文的形式存储在专门用来保管密钥的数据库中。

3.
  根据权利要求1所述的基于数据库的积木式动态加密方法,其特征在于,还植入新的数据类型encrypted_string,使得数据库可以插入数据,编写应用于encrypted_string的操作符函数,使得可以对数据库的数据进行查询。

4.
  根据权利要求3所述的基于数据库的积木式动态加密方法,其特征在于,植入新的数据类型encrypted_string和编写应用于encrypted_string的操作符函数的步骤包括:
(n)创建encrypted_string类型;
(o)添加encrypted_string类型比较函数;
(p)添加为encrypted_string提供索引功能的函数;
(q)创建encrypted_string运算操作符;
(r)创建encrypted_string索引必要的操作符列表。

说明书

一种基于数据库的积木式动态加密方法
技术领域
本发明涉及数据库加密领域,特别是涉及一种基于数据库的积木式动态加密方法。
背景技术
在当下这个信息爆炸的时代,信息安全已经成为非常热门的话题。而现代信息安全技术,在防范网络攻击方面,已经做的相当出色。身份认证技术,防火墙,路由器技术,安全监测与审计技术,最大限度的保证了信息在网络中的安全。
然而,强大的网络安全技术并不能阻止信息的泄露。2013年震惊世界的棱镜事件发生。如此机密的文件信息为何斯诺登能够获取到呢?这必须和斯诺登此前系统管理员职务有所联系。
即使是网络防范几乎没有漏洞的美国政府,也不能阻止敏感信息从内部流出,那么网络防范没有那么严格安全的企业信息又如何得到保障?棱镜事件后,国内也发生了多起信息外泄的安全时间,开房记录曝光,用户信息泄露等等。
当网络防御被攻破之后,如何继续保障信息的安全?如何放心的把数据交给权限很大的系统管理员来进行管理?发生的各种事件,让数据安全的重要性越来越高。
数据库作为数据存储的媒介,其安全问题值得重视。数据库加密的难点和重点在于对于密文的检索技术,现今密文检索技术主要有4种:在数据库外部开发自建索引组件、使用同态加密算法对密文进行检索、全文密文检索和透明数据加密解密处理。然而,由于现有数据库和加密后密文的特点,数据库加密的实现有着不小的挑战。主要存在以下问题: 
(1)数据库内的操作符和函数,不支持对密文的查询和检索。
(2)查询效率必须满足日常使用要求。
(3)使用新的加密数据库,要使原有系统后台连接数据库的代码尽可能少的改动。
(4)合理使用密钥,保证数据库管理员无法知道敏感信息。
作为信息安全防护的最后一道屏障,数据库加密已经成为越来越热门的研究课题。
发明内容
本发明主要解决的技术问题是提供一种基于数据库的积木式动态加密方法,通过使用PostgreSQL提供的开发者接口,实现了类似于TDE透明数据操作的数据库加密方案,在基于数据库的积木式动态加密方法的普及上有着广泛的市场前景。
为解决上述技术问题,本发明提供一种基于数据库的积木式动态加密方法,包括以下步骤:
(1)布鲁姆滤波器的实现:
(a)自定义一个结构体BLOOM,结构体内声明了位数组的大小asize、用于表示布鲁姆滤波器的位数组a、所用的哈希函数个数nfuncs、以及指向所有用到的哈希函数的函数指针funcs,这些哈希函数传入const char*类型的参数并输出unsigned int类型的结果,这里用typedef unsigned int (*hashfunc_t)(const char *)来声明一个指向所需哈希函数的函数指针类型hashfunc_t;
(b)编写创建布鲁姆滤波器的函数BLOOM *bloom_create(int size, int nfuncs, ...),根据传入的size来确定位数组大小、传入的nfuncs来确定哈希函数的个数,使用var_start和var_end来处理动态个数的参数列表,得到所有哈希函数指针;
(c)编写销毁布鲁姆滤波器的函数int bloom_destroy(BLOOM *bloom),用于在完成布鲁姆滤波器运算后,及时销毁堆中的内存,防止内存泄露;
(d)编写添加元素的函数int bloom_add(BLOOM *bloom, const char *s),用于向指定的bloom中添加字符串元素s;
(e)编写检查元素是否属于布鲁姆滤波器的函数int bloom_check(BLOOM *bloom, const char *s),使用bloom中指向哈希函数的函数指针,依次计算s的哈希值并检查位数组上相应的数值,如果为0,返回false;
(2)为明文添加随机字符串:
(f)利用OpenSSL提供的函数int  RAND_bytes(unsigned char *buf,int num)来产生5个随机数;
(g)将产生的随机数转换成相应的16进制字符串,生成1个长度为10的Hex字符串;
(3)加密:
(h)使用步骤(1)中实现的代码生成布鲁姆滤波器;
(i)计算明文长度,生成长度计数器;
(j)使用步骤(2)中实现的代码生成随机字符串,并接在明文后面生成最终带加密字符串;
(k)利用OpenSSL提供的API,加密步骤(j)得到的字符串;
(l)将步骤(h)、(j)、(k)中得到的字符串组合在一起,形成最终密文;
(4)解密:
(m)忽略密文的布鲁姆滤波器部分,按照步骤(3)加密时的组合顺序提取出明文计数器和密文,解密密文后,截取明文计数器指示的明文长度,得到最终明文。
在本发明一个较佳实施例中,步骤(3)、(4)中设定了两个密钥:主密钥MasterKey和工作密钥SessionKey,其中主密钥MasterKey,由开发人员和用户#define在代码中共同协定,用来加密工作密钥,工作密钥SessionKey,用于加密数据,通过AES128算法,以密文的形式存储在专门用来保管密钥的数据库中。
在本发明一个较佳实施例中,还植入新的数据类型encrypted_string,使得数据库可以插入数据,编写应用于encrypted_string的操作符函数,使得可以对数据库的数据进行查询。
在本发明一个较佳实施例中,植入新的数据类型encrypted_string和编写应用于encrypted_string的操作符函数的步骤包括:
(n)创建encrypted_string类型;
(o)添加encrypted_string类型比较函数;
(p)添加为encrypted_string提供索引功能的函数;
(q)创建encrypted_string运算操作符;
(r)创建encrypted_string索引必要的操作符列表。
本发明的有益效果是:本发明基于数据库的积木式动态加密方法具有能够利用数据库原本就有的查询优化技术进行密文的查找和计算,并且不需要过多的更改原有应用程序连接数据库部分的代码,同时数据库管理员无法获得明文信息等优点,在基于数据库的积木式动态加密方法的普及上有着广泛的市场前景。
具体实施方式
下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
一种基于数据库的积木式动态加密方法,包括以下步骤:
(1)布鲁姆滤波器的实现:
(a)自定义一个结构体BLOOM,结构体内声明了位数组的大小asize、用于表示布鲁姆滤波器的位数组a、所用的哈希函数个数nfuncs、以及指向所有用到的哈希函数的函数指针funcs,这些哈希函数传入const char*类型的参数并输出unsigned int类型的结果,这里用typedef unsigned int (*hashfunc_t)(const char *)来声明一个指向所需哈希函数的函数指针类型hashfunc_t;
(b)编写创建布鲁姆滤波器的函数BLOOM *bloom_create(int size, int nfuncs, ...),根据传入的size来确定位数组大小、传入的nfuncs来确定哈希函数的个数,使用var_start和var_end来处理动态个数的参数列表,得到所有哈希函数指针;
(c)编写销毁布鲁姆滤波器的函数int bloom_destroy(BLOOM *bloom),用于在完成布鲁姆滤波器运算后,及时销毁堆中的内存,防止内存泄露;
(d)编写添加元素的函数int bloom_add(BLOOM *bloom, const char *s),用于向指定的bloom中添加字符串元素s;
(e)编写检查元素是否属于布鲁姆滤波器的函数int bloom_check(BLOOM *bloom, const char *s),使用bloom中指向哈希函数的函数指针,依次计算s的哈希值并检查位数组上相应的数值,如果为0,返回false;
(2)为明文添加随机字符串:
因为加密要求相同明文每次加密密文不同,因此我们需要向明文添加随机字符串,来达到此目的,
(f)利用OpenSSL提供的函数int  RAND_bytes(unsigned char *buf,int num)来产生5个随机数;
(g)将产生的随机数转换成相应的16进制字符串,生成1个长度为10的Hex字符串;
(3)加密:
我们可以利用OpenSSL提供的加密算法API实现字符串的加密处理,将所需的其他密文信息,比如布鲁姆滤波器和记录明文长度的Hex格式的计数器组合在一起,形成最终插入数据库的密文,
(h)使用步骤(1)中实现的代码生成布鲁姆滤波器;
(i)计算明文长度,生成长度计数器;
(j)使用步骤(2)中实现的代码生成随机字符串,并接在明文后面生成最终带加密字符串;
(k)利用OpenSSL提供的API,加密步骤(j)得到的字符串;
(l)将步骤(h)、(j)、(k)中得到的字符串组合在一起,形成最终密文;
(4)解密:
(m)忽略密文的布鲁姆滤波器部分,按照步骤(3)加密时的组合顺序提取出明文计数器和密文,解密密文后,截取明文计数器指示的明文长度,得到最终明文。
其中,OpenSSL 是使用非常广泛的 SSL 的开源实现。由于其中实现了为 SSL 所用的各种加密算法,因此 OpenSSL 也是被广泛使用的加密函数库。OpenSSL 中支持众多的密码算法,并提供了很好的封装和接口。密码算法主要分为如下几类:对称算法、公钥算法、散列算法、随机数产生算法等。OpenSSL代码全部用C编写,因此采用OpenSSL来开发加密/解密模块,不会受到应用平台的制约。
优选地,步骤(3)、(4)中设定了两个密钥:主密钥MasterKey和工作密钥SessionKey,其中主密钥MasterKey,由开发人员和用户#define在代码中共同协定,用来加密工作密钥,工作密钥SessionKey,用于加密数据,通过AES128算法,以密文的形式存储在专门用来保管密钥的数据库中。这样,数据库管理员并不知道MasterKey的值,没有办法解密SessionKey,也就没有办法解密数据库内的密文信息,而开发人员,虽然知道MasterKey,但是没有连接数据库的权限,获取数据库信息也无从谈起。包括以下步骤:
(201)声明SessionKey的全局变量,char sessionkey[21] = { 0 };
(202)编写函数void getsessionkey(char* sessionkey),利用PostgreSQL提供的libpg API,连接数据库并且得到密钥密文,解密得到用于加密解密的密钥。其中通过getenv("PG_CONN_KEY_STORAGE")方法,得到配置在系统环境变量中的连接迷药数据库的url,以达到客户可以根据自身数据库环境配置连接参数的目的;
(203)编写函数char* encrypt(char* plain)和char* decrypt(char* cipher),使用得到的SessionKey作为密钥实现加密解密操作,作为最终被数据库/应用调用的加密/解密函数。
优选地,还植入新的数据类型encrypted_string,使得数据库可以插入数据,编写应用于encrypted_string的操作符函数,使得可以对数据库的数据进行查询。
优选地,植入新的数据类型encrypted_string和编写应用于encrypted_string的操作符函数的步骤包括:
(n)创建encrypted_string类型;
(o)添加encrypted_string类型比较函数;
(p)添加为encrypted_string提供索引功能的函数;
(q)创建encrypted_string运算操作符;
(r)创建encrypted_string索引必要的操作符列表。
利用PostgreSQL提供的编程接口,我们可以编写所需要的数据类型和功能,将所写的函数自然的融入进数据库原有的系统中,充分利用数据库原有的机能,上述实施例中仅以encrypted_string加密数据类型为例,演示如何开发并且扩展数据库的功能,其他数据类型均以此为例。
本发明基于数据库的积木式动态加密方法的有益效果是:
一、通过采用OpenSSL加密算法库,实现AES加密、解密(CBC模式)和随机数生成,实现对于同一个明文,每次加密后的密文都不相同;
二、通过利用Bloom Filter,增大部分空间开销,在密文比较时加快整体效率;
三、使用PostgreSQL提供的接口,扩展数据库的功能,植入新的加密数据类型和相应的操作符,将加密数据完整的融入原有数据库系统中,利用数据库自身的查询优化手段达到了高效密文查询的目的。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。

一种基于数据库的积木式动态加密方法.pdf_第1页
第1页 / 共8页
一种基于数据库的积木式动态加密方法.pdf_第2页
第2页 / 共8页
一种基于数据库的积木式动态加密方法.pdf_第3页
第3页 / 共8页
点击查看更多>>
资源描述

《一种基于数据库的积木式动态加密方法.pdf》由会员分享,可在线阅读,更多相关《一种基于数据库的积木式动态加密方法.pdf(8页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN104252604A43申请公布日20141231CN104252604A21申请号201410439845022申请日20140901G06F21/62201301G06F17/3020060171申请人苏州锐盾信息科技有限公司地址215000江苏省苏州市苏州工业园区仁爱路199号B07号楼302单元72发明人罗喜召74专利代理机构苏州广正知识产权代理有限公司32234代理人刘述生54发明名称一种基于数据库的积木式动态加密方法57摘要本发明公开了一种基于数据库的积木式动态加密方法,包括以下步骤(1)布鲁姆滤波器的实现;(2)为明文添加随机字符串;(3)加密;(4)解密。通过。

2、上述方式,本发明基于数据库的积木式动态加密方法具有能够利用数据库原本就有的查询优化技术进行密文的查找和计算,并且不需要过多的更改原有应用程序连接数据库部分的代码,同时数据库管理员无法获得明文信息等优点,在基于数据库的积木式动态加密方法的普及上有着广泛的市场前景。51INTCL权利要求书2页说明书5页19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书5页10申请公布号CN104252604ACN104252604A1/2页21一种基于数据库的积木式动态加密方法,其特征在于,包括以下步骤(1)布鲁姆滤波器的实现(A)自定义一个结构体BLOOM,结构体内声明了位数组的大小ASIZE。

3、、用于表示布鲁姆滤波器的位数组A、所用的哈希函数个数NFUNCS、以及指向所有用到的哈希函数的函数指针FUNCS,这些哈希函数传入CONSTCHAR类型的参数并输出UNSIGNEDINT类型的结果,这里用TYPEDEFUNSIGNEDINTHASHFUNC_TCONSTCHAR来声明一个指向所需哈希函数的函数指针类型HASHFUNC_T;(B)编写创建布鲁姆滤波器的函数BLOOMBLOOM_CREATEINTSIZE,INTNFUNCS,,根据传入的SIZE来确定位数组大小、传入的NFUNCS来确定哈希函数的个数,使用VAR_START和VAR_END来处理动态个数的参数列表,得到所有哈希函数。

4、指针;(C)编写销毁布鲁姆滤波器的函数INTBLOOM_DESTROYBLOOMBLOOM,用于在完成布鲁姆滤波器运算后,及时销毁堆中的内存,防止内存泄露;(D)编写添加元素的函数INTBLOOM_ADDBLOOMBLOOM,CONSTCHARS,用于向指定的BLOOM中添加字符串元素S;(E)编写检查元素是否属于布鲁姆滤波器的函数INTBLOOM_CHECKBLOOMBLOOM,CONSTCHARS,使用BLOOM中指向哈希函数的函数指针,依次计算S的哈希值并检查位数组上相应的数值,如果为0,返回FALSE;(2)为明文添加随机字符串(F)利用OPENSSL提供的函数INTRAND_BYTE。

5、SUNSIGNEDCHARBUF,INTNUM来产生5个随机数;(G)将产生的随机数转换成相应的16进制字符串,生成1个长度为10的HEX字符串;(3)加密(H)使用步骤(1)中实现的代码生成布鲁姆滤波器;(I)计算明文长度,生成长度计数器;(J)使用步骤(2)中实现的代码生成随机字符串,并接在明文后面生成最终带加密字符串;(K)利用OPENSSL提供的API,加密步骤(J)得到的字符串;(L)将步骤(H)、(J)、(K)中得到的字符串组合在一起,形成最终密文;(4)解密(M)忽略密文的布鲁姆滤波器部分,按照步骤(3)加密时的组合顺序提取出明文计数器和密文,解密密文后,截取明文计数器指示的明文。

6、长度,得到最终明文。2根据权利要求1所述的基于数据库的积木式动态加密方法,其特征在于,步骤(3)、(4)中设定了两个密钥主密钥MASTERKEY和工作密钥SESSIONKEY,其中主密钥MASTERKEY由开发人员和用户DENE在代码中共同协定,用来加密工作密钥,工作密钥SESSIONKEY用于加密数据,通过AES128算法,以密文的形式存储在专门用来保管密钥的数据库中。3根据权利要求1所述的基于数据库的积木式动态加密方法,其特征在于,还植入新的数据类型ENCRYPTED_STRING,使得数据库可以插入数据,编写应用于ENCRYPTED_STRING的操作符函数,使得可以对数据库的数据进行查。

7、询。4根据权利要求3所述的基于数据库的积木式动态加密方法,其特征在于,植入新的权利要求书CN104252604A2/2页3数据类型ENCRYPTED_STRING和编写应用于ENCRYPTED_STRING的操作符函数的步骤包括(N)创建ENCRYPTED_STRING类型;(O)添加ENCRYPTED_STRING类型比较函数;(P)添加为ENCRYPTED_STRING提供索引功能的函数;(Q)创建ENCRYPTED_STRING运算操作符;(R)创建ENCRYPTED_STRING索引必要的操作符列表。权利要求书CN104252604A1/5页4一种基于数据库的积木式动态加密方法技术领域。

8、0001本发明涉及数据库加密领域,特别是涉及一种基于数据库的积木式动态加密方法。背景技术0002在当下这个信息爆炸的时代,信息安全已经成为非常热门的话题。而现代信息安全技术,在防范网络攻击方面,已经做的相当出色。身份认证技术,防火墙,路由器技术,安全监测与审计技术,最大限度的保证了信息在网络中的安全。0003然而,强大的网络安全技术并不能阻止信息的泄露。2013年震惊世界的棱镜事件发生。如此机密的文件信息为何斯诺登能够获取到呢这必须和斯诺登此前系统管理员职务有所联系。0004即使是网络防范几乎没有漏洞的美国政府,也不能阻止敏感信息从内部流出,那么网络防范没有那么严格安全的企业信息又如何得到保障。

9、棱镜事件后,国内也发生了多起信息外泄的安全时间,开房记录曝光,用户信息泄露等等。0005当网络防御被攻破之后,如何继续保障信息的安全如何放心的把数据交给权限很大的系统管理员来进行管理发生的各种事件,让数据安全的重要性越来越高。0006数据库作为数据存储的媒介,其安全问题值得重视。数据库加密的难点和重点在于对于密文的检索技术,现今密文检索技术主要有4种在数据库外部开发自建索引组件、使用同态加密算法对密文进行检索、全文密文检索和透明数据加密解密处理。然而,由于现有数据库和加密后密文的特点,数据库加密的实现有着不小的挑战。主要存在以下问题(1)数据库内的操作符和函数,不支持对密文的查询和检索。000。

10、7(2)查询效率必须满足日常使用要求。0008(3)使用新的加密数据库,要使原有系统后台连接数据库的代码尽可能少的改动。0009(4)合理使用密钥,保证数据库管理员无法知道敏感信息。0010作为信息安全防护的最后一道屏障,数据库加密已经成为越来越热门的研究课题。发明内容0011本发明主要解决的技术问题是提供一种基于数据库的积木式动态加密方法,通过使用POSTGRESQL提供的开发者接口,实现了类似于TDE透明数据操作的数据库加密方案,在基于数据库的积木式动态加密方法的普及上有着广泛的市场前景。0012为解决上述技术问题,本发明提供一种基于数据库的积木式动态加密方法,包括以下步骤(1)布鲁姆滤波。

11、器的实现(A)自定义一个结构体BLOOM,结构体内声明了位数组的大小ASIZE、用于表示布鲁姆滤波器的位数组A、所用的哈希函数个数NFUNCS、以及指向所有用到的哈希函数的函数指说明书CN104252604A2/5页5针FUNCS,这些哈希函数传入CONSTCHAR类型的参数并输出UNSIGNEDINT类型的结果,这里用TYPEDEFUNSIGNEDINTHASHFUNC_TCONSTCHAR来声明一个指向所需哈希函数的函数指针类型HASHFUNC_T;(B)编写创建布鲁姆滤波器的函数BLOOMBLOOM_CREATEINTSIZE,INTNFUNCS,,根据传入的SIZE来确定位数组大小、传。

12、入的NFUNCS来确定哈希函数的个数,使用VAR_START和VAR_END来处理动态个数的参数列表,得到所有哈希函数指针;(C)编写销毁布鲁姆滤波器的函数INTBLOOM_DESTROYBLOOMBLOOM,用于在完成布鲁姆滤波器运算后,及时销毁堆中的内存,防止内存泄露;(D)编写添加元素的函数INTBLOOM_ADDBLOOMBLOOM,CONSTCHARS,用于向指定的BLOOM中添加字符串元素S;(E)编写检查元素是否属于布鲁姆滤波器的函数INTBLOOM_CHECKBLOOMBLOOM,CONSTCHARS,使用BLOOM中指向哈希函数的函数指针,依次计算S的哈希值并检查位数组上相应。

13、的数值,如果为0,返回FALSE;(2)为明文添加随机字符串(F)利用OPENSSL提供的函数INTRAND_BYTESUNSIGNEDCHARBUF,INTNUM来产生5个随机数;(G)将产生的随机数转换成相应的16进制字符串,生成1个长度为10的HEX字符串;(3)加密(H)使用步骤(1)中实现的代码生成布鲁姆滤波器;(I)计算明文长度,生成长度计数器;(J)使用步骤(2)中实现的代码生成随机字符串,并接在明文后面生成最终带加密字符串;(K)利用OPENSSL提供的API,加密步骤(J)得到的字符串;(L)将步骤(H)、(J)、(K)中得到的字符串组合在一起,形成最终密文;(4)解密(M)。

14、忽略密文的布鲁姆滤波器部分,按照步骤(3)加密时的组合顺序提取出明文计数器和密文,解密密文后,截取明文计数器指示的明文长度,得到最终明文。0013在本发明一个较佳实施例中,步骤(3)、(4)中设定了两个密钥主密钥MASTERKEY和工作密钥SESSIONKEY,其中主密钥MASTERKEY,由开发人员和用户DENE在代码中共同协定,用来加密工作密钥,工作密钥SESSIONKEY,用于加密数据,通过AES128算法,以密文的形式存储在专门用来保管密钥的数据库中。0014在本发明一个较佳实施例中,还植入新的数据类型ENCRYPTED_STRING,使得数据库可以插入数据,编写应用于ENCRYPTE。

15、D_STRING的操作符函数,使得可以对数据库的数据进行查询。0015在本发明一个较佳实施例中,植入新的数据类型ENCRYPTED_STRING和编写应用于ENCRYPTED_STRING的操作符函数的步骤包括(N)创建ENCRYPTED_STRING类型;(O)添加ENCRYPTED_STRING类型比较函数;(P)添加为ENCRYPTED_STRING提供索引功能的函数;说明书CN104252604A3/5页6(Q)创建ENCRYPTED_STRING运算操作符;(R)创建ENCRYPTED_STRING索引必要的操作符列表。0016本发明的有益效果是本发明基于数据库的积木式动态加密方法具。

16、有能够利用数据库原本就有的查询优化技术进行密文的查找和计算,并且不需要过多的更改原有应用程序连接数据库部分的代码,同时数据库管理员无法获得明文信息等优点,在基于数据库的积木式动态加密方法的普及上有着广泛的市场前景。具体实施方式0017下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。0018一种基于数据库的积木式动态加密方法,包括以下步骤(1)布鲁姆滤波器的实现(A)自定义一个结构体BLOOM,结构体内声明了位数。

17、组的大小ASIZE、用于表示布鲁姆滤波器的位数组A、所用的哈希函数个数NFUNCS、以及指向所有用到的哈希函数的函数指针FUNCS,这些哈希函数传入CONSTCHAR类型的参数并输出UNSIGNEDINT类型的结果,这里用TYPEDEFUNSIGNEDINTHASHFUNC_TCONSTCHAR来声明一个指向所需哈希函数的函数指针类型HASHFUNC_T;(B)编写创建布鲁姆滤波器的函数BLOOMBLOOM_CREATEINTSIZE,INTNFUNCS,,根据传入的SIZE来确定位数组大小、传入的NFUNCS来确定哈希函数的个数,使用VAR_START和VAR_END来处理动态个数的参数列表。

18、,得到所有哈希函数指针;(C)编写销毁布鲁姆滤波器的函数INTBLOOM_DESTROYBLOOMBLOOM,用于在完成布鲁姆滤波器运算后,及时销毁堆中的内存,防止内存泄露;(D)编写添加元素的函数INTBLOOM_ADDBLOOMBLOOM,CONSTCHARS,用于向指定的BLOOM中添加字符串元素S;(E)编写检查元素是否属于布鲁姆滤波器的函数INTBLOOM_CHECKBLOOMBLOOM,CONSTCHARS,使用BLOOM中指向哈希函数的函数指针,依次计算S的哈希值并检查位数组上相应的数值,如果为0,返回FALSE;(2)为明文添加随机字符串因为加密要求相同明文每次加密密文不同,因。

19、此我们需要向明文添加随机字符串,来达到此目的,(F)利用OPENSSL提供的函数INTRAND_BYTESUNSIGNEDCHARBUF,INTNUM来产生5个随机数;(G)将产生的随机数转换成相应的16进制字符串,生成1个长度为10的HEX字符串;(3)加密我们可以利用OPENSSL提供的加密算法API实现字符串的加密处理,将所需的其他密文信息,比如布鲁姆滤波器和记录明文长度的HEX格式的计数器组合在一起,形成最终插入数据库的密文,说明书CN104252604A4/5页7(H)使用步骤(1)中实现的代码生成布鲁姆滤波器;(I)计算明文长度,生成长度计数器;(J)使用步骤(2)中实现的代码生成。

20、随机字符串,并接在明文后面生成最终带加密字符串;(K)利用OPENSSL提供的API,加密步骤(J)得到的字符串;(L)将步骤(H)、(J)、(K)中得到的字符串组合在一起,形成最终密文;(4)解密(M)忽略密文的布鲁姆滤波器部分,按照步骤(3)加密时的组合顺序提取出明文计数器和密文,解密密文后,截取明文计数器指示的明文长度,得到最终明文。0019其中,OPENSSL是使用非常广泛的SSL的开源实现。由于其中实现了为SSL所用的各种加密算法,因此OPENSSL也是被广泛使用的加密函数库。OPENSSL中支持众多的密码算法,并提供了很好的封装和接口。密码算法主要分为如下几类对称算法、公钥算法、散。

21、列算法、随机数产生算法等。OPENSSL代码全部用C编写,因此采用OPENSSL来开发加密/解密模块,不会受到应用平台的制约。0020优选地,步骤(3)、(4)中设定了两个密钥主密钥MASTERKEY和工作密钥SESSIONKEY,其中主密钥MASTERKEY,由开发人员和用户DENE在代码中共同协定,用来加密工作密钥,工作密钥SESSIONKEY,用于加密数据,通过AES128算法,以密文的形式存储在专门用来保管密钥的数据库中。这样,数据库管理员并不知道MASTERKEY的值,没有办法解密SESSIONKEY,也就没有办法解密数据库内的密文信息,而开发人员,虽然知道MASTERKEY,但是没。

22、有连接数据库的权限,获取数据库信息也无从谈起。包括以下步骤(201)声明SESSIONKEY的全局变量,CHARSESSIONKEY210;(202)编写函数VOIDGETSESSIONKEYCHARSESSIONKEY,利用POSTGRESQL提供的LIBPGAPI,连接数据库并且得到密钥密文,解密得到用于加密解密的密钥。其中通过GETENV“PG_CONN_KEY_STORAGE“方法,得到配置在系统环境变量中的连接迷药数据库的URL,以达到客户可以根据自身数据库环境配置连接参数的目的;(203)编写函数CHARENCRYPTCHARPLAIN和CHARDECRYPTCHARCIPHER,。

23、使用得到的SESSIONKEY作为密钥实现加密解密操作,作为最终被数据库/应用调用的加密/解密函数。0021优选地,还植入新的数据类型ENCRYPTED_STRING,使得数据库可以插入数据,编写应用于ENCRYPTED_STRING的操作符函数,使得可以对数据库的数据进行查询。0022优选地,植入新的数据类型ENCRYPTED_STRING和编写应用于ENCRYPTED_STRING的操作符函数的步骤包括(N)创建ENCRYPTED_STRING类型;(O)添加ENCRYPTED_STRING类型比较函数;(P)添加为ENCRYPTED_STRING提供索引功能的函数;(Q)创建ENCRYP。

24、TED_STRING运算操作符;(R)创建ENCRYPTED_STRING索引必要的操作符列表。0023利用POSTGRESQL提供的编程接口,我们可以编写所需要的数据类型和功能,将所写的函数自然的融入进数据库原有的系统中,充分利用数据库原有的机能,上述实施例中说明书CN104252604A5/5页8仅以ENCRYPTED_STRING加密数据类型为例,演示如何开发并且扩展数据库的功能,其他数据类型均以此为例。0024本发明基于数据库的积木式动态加密方法的有益效果是一、通过采用OPENSSL加密算法库,实现AES加密、解密(CBC模式)和随机数生成,实现对于同一个明文,每次加密后的密文都不相同;二、通过利用BLOOMFILTER,增大部分空间开销,在密文比较时加快整体效率;三、使用POSTGRESQL提供的接口,扩展数据库的功能,植入新的加密数据类型和相应的操作符,将加密数据完整的融入原有数据库系统中,利用数据库自身的查询优化手段达到了高效密文查询的目的。0025以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。说明书CN104252604A。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1