CN114297699B - 一种复杂结构数据自动加密解密方法及系统 - Google Patents
一种复杂结构数据自动加密解密方法及系统 Download PDFInfo
- Publication number
- CN114297699B CN114297699B CN202210228385.1A CN202210228385A CN114297699B CN 114297699 B CN114297699 B CN 114297699B CN 202210228385 A CN202210228385 A CN 202210228385A CN 114297699 B CN114297699 B CN 114297699B
- Authority
- CN
- China
- Prior art keywords
- encryption
- data
- decryption
- parameter
- processor
- 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
Landscapes
- Storage Device Security (AREA)
Abstract
本发明提出了一种复杂结构数据自动加密解密方法及系统,涉及数据加密解密技术领域,针对现有技术中复杂数据的加密解密难点,整体通过一个通用的数据安全加解密框架,基于注解思想、通过拦截器统一拦截处理所有数据库操作映射方法的参数加密和结果解密。其中自动加密解密方法包括以下步骤:预设加密解密策略,并作为加密解密过程的执行依据;构建数据加解密处理器执行链;基于加密解密策略,根据需求调用数据加解密处理器执行链触发数据加密解密功能。加解密过程全部在框架内部实现,无需开发人员改写业务代码,实际应用中开发人员只需要引入本框架,做一些简单的配置即可使用,极大的减少了开发人员的代码修改量和后期维护成本。
Description
技术领域
本发明涉及数据加密解密的技术领域,特别是一种复杂结构数据自动加密解密方法及系统。
背景技术
当今是互联网技术应用蓬勃发展的时代,互联网应用给大众的工作和生活带来了许多便利。随着电子数据的增长,用户数据往往会通过服务端数据库的形式的进行数据存储。然而,明文存储数据的方式往往会被不法分子通过黑客技术进行数据获取,从而造成用户数据的泄露,导致用户的隐私和财产安全会受到严重威胁。
为了避免用户数据的泄露,采用数据加密的方式在用户敏感信息入库之前对数据进行加密处理。现有技术中常采用的一种加密方法是针对每个涉及到携带用户敏感数据的请求单独做加密或解密处理;另一种是服务端引入一个统一数据加解密框架,统一处理所有携带敏感信息的数据库操作方法。
方法一中服务端每一个涉及敏感数据保存入库或查询敏感数据的请求处理接口,都需增加数据加密或解密的逻辑,大大增加了开发人员的工作量及后期维护成本。方法二中存在无法对复杂结构的Java Bean自动加密或解密、无法对JSON数据局部内容加解密、应用场景受限、执行效率低等问题。
发明内容
发明目的:提出一种复杂结构数据自动加密解密方法及系统,以解决现有技术存在的上述问题。通过一个通用的数据安全加解密框架,基于注解思想、通过mybatis拦截器统一拦截处理所有mapper方法的参数加密和结果解密。加解密过程全部在框架内部实现,无需开发人员改写业务代码。开发人员只需要引入本框架,做一些简单的配置即可使用,极大的减少了开发人员的代码修改量和后期维护成本。
技术方案:第一方面,提出了一种复杂结构数据自动加密解密方法,包括以下步骤:
构建数据安全加解密框架,预设加密解密策略,并作为加密解密过程的执行依据;
构建数据加解密处理器执行链;
基于所述加密解密策略,根据需求调用所述数据加解密处理器执行链触发数据加密解密功能;
其中根据需求进行数据加密解密过程中,构建缓存中心用于存储加密解密过程中的数据处理结果。
在第一方面的一些可实现方式中,数据加密解密过程包括:数据加密和数据解密。具体的,数据加密的实现过程具体包括:
数据安全加解密框架接收待进行处理的数据,触发对应的参数加密处理器;
执行参数加密处理器获取加密字段,并调用数据加解密处理器执行链加密数据;
将加密后的数据存储数据库中。
数据解密的实现过程具体包括:
读取数据库中待进行解密处理的数据,触发对应的结果解析器;
执行参数解密处理器获取解密字段,并调用数据加解密处理器执行链解密数据;
将解密后的数据输出。
其中,数据加解密处理器执行链执行加密数据和解密数据的过程中,还包括调用定制化的逻辑处理器;逻辑处理器包括:加解密前置处理器和加解密后置处理器。
参数加密处理器通过预设对应的处理函数类,进行不同数据类型的参数加密,所述处理函数类进一步包括:第一处理函数类、第二处理函数类、第三处理函数类、第四处理函数类、第五处理函数类、第六处理函数类。
在第一方面的一些可实现方式中,涉及到的处理函数类实现参数加密功能对应的加密处理器为:
第一处理函数类:自定义数据库操作映射方法参数加密处理器;
第二处理函数类:Mybatis-plus框架提供的通用mapper方法参数加密处理器类;
第三处理函数类:动态包装参数方法参数加密处理器;
第四处理函数类:更新方法参数加密处理器;
第五处理函数类:继承第二处理函数类的参数加密处理器;
第六处理函数类:无参数处理情况下的参数加密处理器。
在第一方面的一些可实现方式中,第三处理函数类继承了第二处理函数类,用于处理动态条件和动态参数的mapper方法参数加密,负责为参数和条件语句是动态的mapper方法提供加密支持。
在第一方面的一些可实现方式中,在面对存在嵌套数据结构的复杂数据信息时,所述数据加解密处理器执行链触发数据加密解密功能时,具体包括以下步骤:
通过逐一判断的方式判断接收到的数据类型;
根据数据类型调用对应的数据加解密处理器;
对应的数据加解密处理器在遍历完接收到的数据属性后回传给数据加解密处理器执行链;
数据加解密处理器执行链将最终获取到的数据汇总到预设数据类型的数据加解密处理器中,并进行加解密处理。
针对按需加解密的过程,通过添加注解的方式在需要加密的属性上进行标记,并同时指定需要加密的属性字段;针对属性字段多层嵌套的待加解密数据,采用预设标识符进行划分。
在第一方面的一些可实现方式中,缓存中心用于存储加密解密过程中的数据处理结果,以及作为加密解密过程中的回调依据。回调处理的执行情况包括:第一种情况,系统组件第一次查询时,缓存中没有该数据,则执行回调;第二种情况,缓存数据超时未被加载时自动失效,系统组件下一次查询该数据时,执行回调。
缓存中心还包括:热点数据查询功能、有效期控制功能和容量控制功能。其中热点数据包括:Mapper元数据缓存、Mapper参数加密处理器对象、Mapper结果解析器对象、JavaBean解密属性和Java Bean加密属性。
第二方面,提出一种复杂结构数据自动加密解密系统,该系统具体包括:
用于构建数据安全加解密框架的框架构建模块;
用于制定加密解密策略的策略预设模块;
用于执行加解密过程的加解密模块;
用于构建存储数据加密解密过程数据的缓存中心构建模块。
有益效果:本发明提出了一种复杂结构数据自动加密解密方法及系统,通过构建一个通用的数据安全加解密框架,基于注解思想、通过mybatis拦截器统一拦截处理所有mapper方法的参数加密和结果解密。加解密过程全部在框架内部实现,无需开发人员改写业务代码。开发人员只需要引入本框架,做一些简单的配置即可使用,极大的减少了开发人员的代码修改量和后期维护成本。
与现有技术中流行的数据安全框架相比,本发明不仅支持普通数据结构的JavaBean属性的自动加解密,还设计了基于责任链模式+递归思想的算法,实现了复杂数据结构的Java Bean自动加密和自动解密。
对于数据库中以JSON形式存储的数据,本发明不同于常见的数据安全框架仅仅是粗暴的完全加密后存储,而是对接实际需求,为开发者提供注解配置的方式,通过前后置处理器、自研JSON结构数据的加解密算法,实现对JSON数据的局部内容自动加密存储、自动解密JSON局部加密的内容,局部加密保证了JSON数据结构完整性不被破坏。
现有的数据自动加解密框架,只支持对固定条件语句加固定参数的mapper方法参数的加密,而本发明突破了该难点。当mapper方法参数为Wrapper条件构造器时,构造出来的sql语句的条件、参数都是动态变化的,本发明通过解析Wrapper条件构造器,获取参数占位符对应的实际参数值映射关系数据,解析需加密的参数占位符,并对实际参数值加密后重新注入到映射关系数据中,解决了动态sql条件语句的参数自动加密。
另外,本发明采用缓存中心,在内存中缓存热点数据,避免了核心组件频繁的调用繁琐的元数据解析过程,提高了系统性能。
附图说明
图1为现有技术中第一种数据处理流程图。
图2为现有技术中第二种数据处理流程图。
图3为本发明提出的数据处理流程图。
图4为本发明实施例数据加密处理流程图。
图5为本发明实施例数据解密处理流程图。
图6为本发明实施例针对Java Bean数据类型进行加密处理流程图。
图7为本发明实施例缓存中心示意图。
图8为本发明实施例框架结构示意图。
具体实施方式
在下文的描述中,给出了大量具体的细节以便提供对本发明更为彻底的理解。然而,对于本领域技术人员而言显而易见的是,本发明可以无需一个或多个这些细节而得以实施。在其他的例子中,为了避免与本发明发生混淆,对于本领域公知的一些技术特征未进行描述。另外本申请中提及的mapper方法均为数据库操作映射方法。
在信息电子化的时代,安全存储用户信息成了信息化时代的重要需求之一,为了避免黑客技术对服务器的攻击,保护用户的隐私和财产安全,对数据进行加密处理成了不可或缺的技术。
现有技术中,在用户敏感信息入库之前,会对这些数据做加密处理,如图1所示是针对每个涉及到携带用户敏感数据的请求单独做加密或解密处理。这种方案实现起来的困难虽小,但是服务端每一个涉及敏感数据保存入库或查询敏感数据的请求处理接口时,都需增加数据加密或解密的逻辑,大大增加了开发人员的工作量及后期维护成本。
另一种方案如图2所示,服务端引入一个统一数据加解密框架,统一处理所有携带敏感信息的数据库操作方法,在敏感数据入库前对数据进行加密处理,在查询结果返回前对数据解密。虽然解决了上一个方案的缺点,但依旧存在以下的缺点:
缺点一、无法对复杂结构的Java Bean自动加密或解密;
缺点二、程序中用String字符串类型与数据库中JSON数据类型映射时,无法对程序中的String参数的需要加密的局部内容进行加密入库,也无法确定如何对数据库返回的JSON数据进行解密;
缺点三、程序同时引入mybatis-plus框架时,当使用mybatis-plus框架提供的参数为Wrapper条件构造器的mapper方法时,与普通mapper方法不同,其条件语句、参数名、参数值都是动态的,同一个mapper方法,传入不同的Wrapper对象,最终生成的sql,条件是不一样的。而普通mapper方法,只有参数值是动态变化的,条件语句、参数名都是固定不变的。现有的数据自动加解密框架缺乏对该场景的支持;
缺点四、引入框架后,由于每次调用mapper方法都需要解析需要加密的参数或需要解密的结果字段、解析mapper方法元数据等,复杂的解析过程降低了系统的性能。
实施例一
在一个实施例中,为了克服现有技术中存在的问题,提出一种复杂结构数据自动加密解密方法,并将统一处理所有携带敏感信息的数据库操作方法简称为mapper方法,该方法通过构建数据安全加解密框架,根据实际应用需求,利用数据安全加解密框架对接收到的数据进行加密或解密的数据处理。
具体的,如图3所示,一种复杂结构数据自动加密解密方法包括以下步骤:
步骤1、构建加解密执行框架,并预设加密解密策略,并用于作为加密解密过程的执行依据;
步骤2、构建数据加解密处理器执行链;
步骤3、基于所述加密解密策略,根据需求调用所述数据加解密处理器执行链触发数据加密解密功能;
其中根据需求进行数据加密解密过程中,构建缓存中心用于存储加密解密过程中的数据处理结果。
本实施例中,通过构建通用加解密框架便于后续实际应用的调用,在无需开发人员改写业务代码的前提下,通过简单的配置即可使用,极大程度上的减少了开发人员代码修改量和后期维护成本。
实施例二
在实施例一基础上的进一步实施例中,加密的实现过程包括:
a、根据数据安全加解密框架接收到的数据,触发对应的参数加密处理器;
b、执行参数加密处理器获取加密参数,并调用数据加解密处理器执行链触发数据加解密处理器进行数据加密;
c、将加密后的数据存储数据库中。
在进一步的实施例中,自动加密的过程在获取数据安全加解密框架接收到的数据时,首先通过构建的缓存中心进行存储;其次,加载缓存中心中存储数据的元数据信息,并触发参数加密处理器解析需要加密的参数;随后,调用数据加解密处理器执行链触发数据加解密处理器进行数据加密。数据加解密处理器执行数据加密的过程中,通过调用加解密前置处理器,执行加密前置处理逻辑,并在前置处理结果为完成时调用加解密后置处理器,执行加密后置处理逻辑。
在进一步的实施例中,加载缓存中心中存储数据的元数据信息时,若未能加载到所需的数据信息,则通过反射机制对获取到的数据进行解析,并将解析结果存储至缓存中心用于作为下一次读取的元数据。元数据中主要包括:方法的参数列表、返回结果类型信息等等。
在进一步的实施例中,构建参数加密处理器工厂,用于生成参数加密处理器对象。在触发参数加密处理器解析需要加密的参数过程中,若未能加载到对应的参数加密处理器,则通过参数加密处理器工厂,创建参数加密处理器对象,并将对象放入缓存用于后续的调用。
在进一步的实施例中,构建加解密策略工厂,用于创建加解密策略对象。当调用加解密前置处理器,执行加密前置处理逻辑的处理结果为“未完成”时,调用加解密策略工厂创建加解密策略对象,并根据加解密策略对象执行数据的最终加密,随后调用加解密后置处理器,执行加密后置处理逻辑。
优选实施例中,如图4所示,加密的实现过程如下:
步骤1、接收待进行处理的数据,获取待进行处理数据中的加密参数并存入缓存中心;
步骤2、从缓存中心中加载mapper方法的元数据信息,并判断是否加载成功,当判断结果为不成功时,跳转至步骤3;反之,跳转至步骤4;
步骤3、利用反射机制进行解析,并将解析结果存储至缓存中心后,跳转至步骤2;
步骤4、从缓存中心中加载对应的参数加密处理器,并在加载完成后执行参数加密处理器获取加密参数;若缓存中心未能加载到对应的参数加密处理器,则跳转至步骤5;反之,跳转至步骤6;
步骤5、调用参数加密处理器工厂,创建参数加密处理器对象,并将对象放入缓存后,跳转至步骤4;
步骤6、解析获取加密参数,获取需要加密的字段;
步骤7、调用数据加解密处理器执行链触发数据加解密处理器进行数据加密;
步骤8、数据加解密处理器调用加解密前置处理器,执行加密前置处理逻辑,并在处理完成后跳转至步骤11;反之,跳转至步骤9;
步骤9、数据加解密处理器调用加解密策略工厂,创建加解密策略对象;
步骤10、利用加解密策略对象,执行数据的最终加密;
步骤11、数据加解密处理器调用加解密后置处理器,执行加密后置处理逻辑;
步骤12、参数加密过程完成,将加密后的数据存储至数据库中。
在进一步的实施例中,由于现有的数据自动加解密框架,只支持对固定条件语句加固定参数的mapper方法参数的加密,因此,提出一种动态sql条件语句的参数自动加密方法。
具体的,参数加密处理器通过预设对应的处理函数类,进行不同数据类型的参数加密,处理函数类进一步包括:第一处理函数类、第二处理函数类、第三处理函数类、第四处理函数类、第五处理函数类、第六处理函数类。
其中,涉及到的处理函数类实现参数加密功能对应的加密处理器为:第一处理函数类:自定义数据库操作映射方法参数加密处理器;第二处理函数类:Mybatis-plus框架提供的通用mapper方法参数加密处理器类;第三处理函数类:动态包装参数方法参数加密处理器;第四处理函数类:更新方法参数加密处理器;第五处理函数类:继承第二处理函数类的参数加密处理器;第六处理函数类:无参数处理情况下的参数加密处理器。
第三处理函数类继承了第二处理函数类,用于处理动态条件和动态参数的mapper方法参数加密,负责为参数和条件语句是动态的mapper方法提供加密支持。
具体的,执行第三处理函数类进行参数和条件语句是动态的mapper方法提供加密支持的过程为:
a、构建缓存集合,并根据原始加密参数信息获取Wrapper对象;
b、根据Wrapper对象,去缓存中心查询当前mapper方法的参数占位符列表,并判断获取结果,当结果为获取到时,跳转至步骤d;反之,跳转至步骤c;
c、如果获取不到,则解析Wrapper获取,并在放入缓存中心后跳转至步骤b;其中参数占位符是mybatis框架生成sql时的动态参数,用于替换开发者传入的实际参数数据;
d、过滤出需要加密的参数占位符,放入缓存集合中,并根据Wrapper对象,获取所有参数占位符和实际参数值的映射关系,当数据类型为Map类型时,将这些数据命名为paramNameValuePairs;
e、遍历缓存集合;
f、根据当前遍历到的参数占位符,去paramNameValuePairs中取出该参数占位符对应的实际参数值;
g、将实际参数值交给数据加解密处理器执行链,执行加密并返回加密后的值;
h、将加密后的值重新放入paramNameValuePairs中。
本实施例针对现有的数据自动加解密框架只支持对固定条件语句+固定参数的mapper方法参数的加密的问题,提出了克服方法。由于当mapper方法参数为Wrapper条件构造器时,构造出来的sql语句的条件、参数都是动态变化的,因此本实施例通过解析Wrapper条件构造器,获取参数占位符与实际参数值映射关系数据,解析需加密的参数占位符,并对实际参数值加密后重新注入到映射关系数据中,解决了动态sql条件语句的参数自动加密。
实施例三
在实施例一基础上的进一步实施例中,解密的实现过程包括:
a、读取数据库中待进行解密处理的数据,触发对应的结果解析器;
b、执行结果解析器获取解密字段,并调用数据加解密处理器执行链解密数据;
c、将解密后的数据输出。
在进一步的实施例中,结果解析器获取解密字段时,若未能加载到所需的数据信息,则通过反射机制对获取到的数据进行解析,并将解析结果存储至缓存中心用于作为下一次读取的元数据。
在进一步的实施例中,构建结果解析工厂,用于生成结果解析器对象。在触发结果解析器解析需要解密的参数过程中,若未能加载到对应的结果解析器,则通过结果解析器工厂,创建结果解析器对象,并将对象放入缓存用于后续的调用。
在进一步的实施例中,构建加解密策略工厂,用于创建加解密策略对象。当调用加解密前置处理器,执行解密前置处理逻辑的处理结果为“未完成”时,调用加解密策略工厂创建加解密策略对象,并根据加解密策略对象执行数据的最终加密,随后调用加解密后置处理器,执行加密后置处理逻辑。
优选实施例中,如图5所示,解密的实现过程如下:
步骤1、获取数据库中存储的加密数据;
步骤2、从缓存中心中加载对应的结果解析器对象,并在加载完成后执行结果解析器获取解密参数;若缓存中心未能加载到对应的结果解析器,则跳转至步骤3;反之,跳转至步骤4;
步骤3、调用结果解析器工厂,创建结果解析器对象,并将对象放入缓存后,跳转至步骤2;
步骤4、解析获取解密参数,获取需要解密的字段;
步骤5、调用数据加解密处理器执行链触发数据加解密处理器进行数据解密;
步骤6、数据加解密处理器调用加解密前置处理器,执行解密前置处理逻辑,并在处理完成后跳转至步骤9;反之,跳转至步骤7;
步骤7、数据加解密处理器调用加解密策略工厂,创建加解密策略对象;
步骤8、利用加解密策略对象,执行数据的最终解密;
步骤9、数据加解密处理器调用加解密后置处理器,执行解密后置处理逻辑;
步骤10、获取最终的解密数据,并将解密后的数据输出。
实施例四
在实施例一基础上的进一步实施例中,笼统的数据处理往往会导致数据加密不准确,而且并行运行的处理方式导致数据运行内存需求过大,使得成本增加。针对嵌套型的数据结构,例如A类中包含了B类型的属性,B类中又包含了C类型的属性,C类中又包含了D类型的属性,而A、B、C、D均存在需要加密的属性,市面上流行的自动加解密框架,仅能实现单层Java Bean属性的自动加解密,即A类中属性的自动加解密。
针对上述复杂结构的数据,本实施例通过构建责任链的方式,在递归的处理流程中实现复杂结构数据的加解密。具体的,针对复杂的数据结构,在数据加解密处理器执行链触发数据加密解密功能时,包括以下步骤:
a、通过逐一判断的方式判断接收到的数据类型;
b、根据数据类型调用对应的数据加解密处理器;
c、对应的数据加解密处理器在遍历完接收到的数据属性后回传给数据加解密处理器执行链;
d、数据加解密处理器执行链将最终获取到的数据汇总到预设数据类型的数据加解密处理器中,并进行加解密处理。
其中,接收到的数据类型包括:Java Bean数据类型、集合数据类型、数组数据类型、字符串数据类型和其他数据类型。
优选实施例中,如图6所示,针对Java Bean数据类型,则委托Java Bean类型数据加解密处理器(BeanValueProcessor)处理。
具体的,BeanValueProcessor首先尝试从缓存中心获取其需要加解密的属性列表,如果缓存获取不到,则利用java反射机制解析该Java Bean中需要加解密的属性列表,解析完成后放入缓存中心。随后,遍历需加解密的属性列表,并获取属性对应的属性值。此时BeanValueProcessor不作具体的加解密处理,而是继续将每一个属性数据委托给数据加解密处理器执行链处理。相当于,数据加解密处理器执行链委托了BeanValueProcessor处理,BeanValueProcessor又委托了数据加解密处理器执行链,该过程称为递归调用。
针对集合数据类型,则委托集合类型数据加解密处理器(CollectionValueProcessor)处理。CollectionValueProcessor循环遍历集合每个元素。针对每一个元素,也不作具体的加解密处理,继续将遍历到的每一个元素委托给数据加解密处理器执行链处理。
针对数组数据类型,则委托数组类型数据加解密处理器(ArraryValueProcessor)处理。ArraryValueProcessor循环遍历集合每个元素。针对每一个元素,也不作具体的加解密处理,继续将元素委托给数据加解密处理器执行链处理。
针对字符串数据类型,则委托字符串类型数据加解密处理器(StringValueProcessor)处理。StringValueProcessor首先调用加解密前置处理器,执行前置处理逻辑。之后调用加解密策略工厂,创建加解密策略对象,由该对象执行该字符串的数据加解密工作。加解密完成后,StringValueProcessor再调用加解密后置处理器,执行后置处理逻辑。数据加解密完成。这里,StringValueProcessor是整个递归调用的出口,上述所有的递归过程,最终都会委托到StringValueProcessor进行处理。
针对其他数据类型,则委托给其他类型数据加解密处理器(SimpleValueProcessor),其不作加解密处理,只是做一些日志记录等操作。
本实施例针对现有技术中嵌套的数据结构类型,通过责任链加递归的方式实现了复杂结构数据所有层面的加解密,克服了现有技术中仅能实现单层加密的技术问题。
实施例五
在实施例一基础上的进一步实施例中,现有的Mysql数据库中字段类型可以设置为JSON类型,数据可以直接以JSON字符串的形式存储。现有技术中,数据自动加解密框架,只能实现对简单的字符串类型数据的自动加解密。若数据为JSON字符串,仅能实现对整个JSON字符串全部加密。由于JSON字符串中可以存储非常多的属性,因此实际场景中,有些属性并不需要全部加密,全部加密不仅浪费运算内存资源,同时还会导致加密效率不足。
为了有效提高运算资源的利用,本实施例针对JSON数据类型提出一种按需加密的技术方案,根据用户的需求,对用户的隐私数据进行自动加密。
具体的,针对按需加解密的过程,通过添加注解的方式在需要加密的属性上进行标记,并同时指定需要加密的属性字段;针对属性字段多层嵌套的待加解密数据,采用预设标识符进行划分。
优选实施例中,针对按需加密的字段,在需要加解密的属性上标记自定义@SensitiveNeedEncryptDecryptField注解,同时指定需要加解密的字段列表。当按需加密的字段中存在多层嵌套的情况时,采用“.”符号进行分开。为了避免加密过程中对整个字符串的加解密,在加解密过程中的前置处理执行结束后直接执行后置处理逻辑。
在进一步的实施例中,通过转换JSON字符串为Map或List对象,以及遍历需要加密的字段列表,根据对应的字段列表的属性调用数据加解密处理器执行链进行加密。具体的,字段列表的属性包括:Map类型、字符串集合类型、Map集合类型。
具体的,在遍历过程中通过逐一判断的方式确定字段列表的属性,同时构建临时缓存数组用于存储遍历过程中产生的临时数据。
本实施例针对多种属性数据的数据加密需求,通过采用按需加密的方式,实现自动加密以及对加密的属性自动解密。
实施例六
在实施例一基础上的进一步实施例中,如图7所示缓存中心主要提供了以下功能:热点数据存储、热点数据查询、有效期控制以及容量控制功能。
具体的,热点数据存储用于存储加解密执行时常用的热点数据;热点数据查询用于为系统核心组件提供热点数据查询接口;回调处理用于当系统核心组件调用查询接口结果为空时,自动执行回调逻辑,加载相应的元数据放入缓存;有效期控制用于控制缓存数据的有效期;容量控制用于控制缓存数据的总数量,避免缓存过多数据造成内存溢出。
其中热点数据主要包括:Mapper元数据缓存、Mapper参数加密处理器对象、Mapper结果解析器对象、Java Bean解密属性和Java Bean加密属性。
Mapper元数据缓存,用于存储mapper方法的常用信息;Mapper参数加密处理器对象,用于存储mapper方法对应的参数加密处理器对象;Mapper结果解析器对象,用于存储mapper方法对应的结果解析器对象;Java Bean解密属性用于存储Java Bean中需要解密的属性字段信息;Java Bean加密属性用于存储Java Bean中需要加密的属性字段信息。
回调逻辑只在两种情况下会执行:第一种是系统组件第一次查询时,缓存中没有该数据,则执行回调;第二种是缓存数据超时未被加载时自动失效,系统组件下一次查询该数据时,执行回调。
有效期控制用于控制缓存数据的有效期,在超过一定时间未被使用时,认为该数据不再是热点数据,自动刚从缓存中心移除,节省内存空间。
由于创建mapper的参数加密处理器对象过程较复杂,频繁创建会消耗较高的系统性能。因此本实施例通过创建缓存中心,可以在使用缓存后,只需直接从缓存中取出该对象即可使用,避免了核心组件频繁的调用繁琐的元数据解析过程,提高了系统性能。
实施例七
在实施例一基础上的进一步实施例中,基于一种复杂结构数据自动加密解密方法,提出其应用方法,具体的实现流程为:
步骤一、程序开始执行mapper方法。
步骤二、自定义拦截器拦截mapper方法的执行,获取到MappedStatement对象,MappedStatement是对mapper方法信息的封装,里面包含了mapper方法参数信息:paramObject。paramObject是对mapper参数信息原始参数包装后的对象。
步骤三、拦截器从缓存中心加载mapper方法的元数据信息,主要包括方法的参数列表、返回结果类型信息等。
步骤四、如果从缓存中未加载到,则利用java反射机制解析。
步骤五、拦截器再从缓存中心加载该mapper方法对应的参数加密处理器。如果获取不到,则调用参数加密处理器工厂,创建参数加密处理器对象,并将对象放入缓存。
步骤六、参数加密处理器根据刚刚获取到的mapper方法元数据信息和paramObject,解析mapper方法需要加密的参数,首先从缓存中心加载,加载不到则利用java的反射机制获取需要加密的字段信息,并放入缓存中心。
注:需要加密或解密的字符串参数,通过@ SensitiveNeedEncryptDecryptField注解标记,如果参数为Java Bean类型,则在Java Bean属性上标记。 注解中可以配置加解密策略、前后置处理器等信息。
步骤七、参数加密处理器通过数据加解密处理器执行链,调度数据加解密处理器,执行参数加密过程。
步骤八、数据加解密处理器调用加解密前置处理器,执行加密前置处理逻辑。如果前置处理结果返回“处理完成”,则直接进入步骤十一。
步骤九、数据加解密处理器调用加解密策略工厂,创建加解密策略对象。
步骤十、加解密策略对象,执行数据的最终加密。
步骤十一、数据加解密处理器调用加解密后置处理器,执行加密后置处理逻辑。
步骤十二、参数加密过程完成,开始执行mapper方法。
步骤十三、Java程序发送sql命令,调用数据库执行sql。
步骤十四、数据库返回结果数据。
步骤十五、拦截器根据返回的Java Bean类型的数据,去缓存中心加载对应的结果解析器。如果加载不到,则调用结果解析器工厂,创建结果解析器对象。
步骤十六、结果解析器根据mapper方法的元数据信息,先从缓存中心加载需要解密的Java Bean属性,如果加载不到,则利用java的反射机制获取需要解密的属性信息,并放入缓存中心。
步骤十七、结果解析器调用数据加解密处理器执行链,执行链调度数据加解密处理器进行结果解密过程。
步骤十八、数据加解密处理器调用加解密前置处理器,执行解密前置处理逻辑。如果前置处理结果返回“处理完成”,则直接进入步骤二十一。
步骤十九、数据加解密处理器调用加解密策略工厂,创建加解密策略对象。
步骤二十、加解密策略对象,执行数据的最终解密。
步骤二十一、数据加解密处理器调用加解密后置处理器,执行解密后置处理逻辑。
步骤二十二、得到最终的解密后的数据,mapper方法加解密过程完成。
实施例八
在一个实施例中,提出一种复杂结构数据自动加密解密系统,该系统具体包括:
用于构建数据安全加解密框架的框架构建模块;
用于制定加密解密策略的策略预设模块;
用于执行加解密过程的加解密模块;
用于构建存储数据加密解密过程数据的缓存中心构建模块。
在进一步实施例中,如图8所示,构建的数据安全加解密框架具体包括以下组件:核心注解、自动配置、拦截器、工具类、异常、参数加密处理器工厂、参数加密处理器、缓存中心、结果解析工厂、结果解析器、数据加解密处理器执行链、数据加解密处理器、加解密前置处理器、加解密后置处理器、加解密策略工厂和加解密策略。
对应的组件用途如下:
核心注解:用于标记需要加解密的方法参数或Java Bean中需要加解密的属性。
自动配置:自动创建组件实例(例如,拦截器、数据加解密处理器等)并装配到spring容器中。
拦截器:实现mybatis框架提供的Interceptor拦截器接口,在mapper执行前后加入自定义的处理逻辑,本系统主要是数据加密或解密的处理逻辑。
工具类:提供一些公用的逻辑处理工具方法。
异常:自定义异常类,在框架处理出现异常情况时抛出该异常。
缓存中心:负责将Java Bean需要加密和解密的属性信息、mapper方法的元数据信息、mapper方法的参数加解密处理器对象等热点数据缓存到内存中,以提高数据加解密处理速度。
参数加密处理器工厂:用于创建不同的方法参数加密处理器对象的类。
方法参数加密处理器:负责为不同类型的mapper方法进行参数加密。不同类型的mapper方法,解析需要加密的参数的逻辑是不一样的。
结果解析器工厂:用于创建不同的结果解析器对象的类。
结果解析器:负责为不同形式的结果进行解密。
数据加解密处理器执行链:负责调度、执行不同的数据加解密处理器。
数据加解密处理器:负责为不同类型的数据进行加密、解密处理。具体可分为ArrayValueProcessor(数组类型数据的加解密处理器)、BeanValueProcessor(Java Bean类型数据的加解密处理器)、CollectionValueProcessor(集合类型数据的加解密处理器)、StringValueProcessor(字符串类型数据的加解密处理器)、SimpleValueProcessor(其他数据类型的加解密处理器)。
加解密前置、后置处理器:负责在执行数据的具体加密和解密前、后做一些定制化处理逻辑。
加解密策略:最终对字符串明文数据进行加密、对数据库中返回的密文结果进行解密的处理类。根据不同的加密算法,可分为AES加解密策略、DES加解密策略、自定义加解密策略等。
加解密策略工厂:负责创建具体的加解密策略对象。
综上,本发明提供了一个通用的数据安全加解密框架,基于注解思想、通过mybatis拦截器统一拦截处理所有mapper方法的参数加密和结果解密。加解密过程全部在框架内部实现,无需开发人员改写业务代码。开发人员只需要引入本框架,做一些简单的配置即可使用,极大的减少了开发人员的代码修改量和后期维护成本。
另外,与市面上流行的数据安全框架相比,本发明不仅支持普通数据结构的JavaBean属性的自动加解密,还设计了基于责任链模式+递归思想的算法,实现了复杂数据结构的Java Bean自动加密和自动解密。
对于数据库中以JSON形式存储的数据,本发明不同于常见的数据安全框架仅仅是粗暴的完全加密后存储,而是对接实际需求,为开发者提供注解配置的方式,通过前后置处理器、自研JSON结构数据的加解密算法,实现对JSON数据的局部内容自动加密存储、自动解密JSON局部加密的内容。局部加密保证了JSON数据结构完整性不被破坏,而完全加密存储破坏了原有的JSON结构,加密后无法辩识其存储哪些信息。
现有的数据自动加解密框架,只支持对固定条件语句+固定参数的mapper方法参数的加密,而本发明突破了该难点。当mapper方法参数为Wrapper条件构造器时,构造出来的sql语句的条件、参数都是动态变化的,本发明通过解析Wrapper条件构造器,获取参数占位符--实际参数值映射关系数据,解析需加密的参数占位符,并对实际参数值加密后重新注入到映射关系数据中,解决了动态sql条件语句的参数自动加密。
除此之外,本发明采用缓存中心,在内存中缓存热点数据,避免了核心组件频繁的调用繁琐的元数据解析过程,提高了系统性能。
如上所述,尽管参照特定的优选实施例已经表示和表述了本发明,但其不得解释为对本发明自身的限制。在不脱离所附权利要求定义的本发明的精神和范围前提下,可对其在形式上和细节上做出各种变化。
Claims (7)
1.一种复杂结构数据自动加密解密方法,其特征在于,包括如下步骤:
构建数据安全加解密框架,预设加密解密策略,并作为加密解密过程的执行依据;
构建数据加解密处理器执行链;
基于所述加密解密策略,根据需求调用所述数据加解密处理器执行链触发数据加密解密功能;
在根据需求进行数据加密解密的过程中,还进一步构建缓存中心,用于存储加密解密过程中的数据处理结果;
在面对存在嵌套数据结构的复杂数据信息时,所述数据加解密处理器执行链在触发数据加密解密功能时,具体包括以下步骤:
通过循环遍历数据内容的方式,逐一判断接收到的数据类型;
根据数据类型调用对应的数据加解密处理器;
对应的数据加解密处理器在遍历完接收到的数据属性后回传给数据加解密处理器执行链;
数据加解密处理器执行链将最终获取到的数据汇总到预定义数据类型的数据加解密处理器中,并进行加解密处理;
针对按需加解密的过程,通过添加注解的方式在需要加密的属性上进行标记,并同时指定需要加密的属性字段;针对属性字段多层嵌套的待加解密数据,采用预设标识符进行划分;
执行第三处理函数类,为参数和条件语句是动态的mapper方法,提供加密支持,具体的过程为:
a、构建缓存集合,并根据原始加密参数信息获取Wrapper对象;
b、根据Wrapper对象,去缓存中心查询当前mapper方法的参数占位符列表,并判断获取结果,当结果为获取到时,跳转至步骤d;反之,跳转至步骤c;
c、如果获取不到,则解析Wrapper获取,并在放入缓存中心后跳转至步骤b;其中参数占位符是mybatis框架生成sql时的动态参数,用于替换开发者传入的实际参数数据;
d、过滤出需要加密的参数占位符,放入缓存集合中,并根据Wrapper对象,获取所有参数占位符和实际参数值的映射关系,当数据类型为Map类型时,将这些数据命名为paramNameValuePairs;
e、遍历缓存集合;
f、根据当前遍历到的参数占位符,去paramNameValuePairs中取出该参数占位符对应的实际参数值;
g、将实际参数值交给数据加解密处理器执行链,执行加密并返回加密后的值;
h、将加密后的值重新放入paramNameValuePairs中;
其中,第三处理函数类用于实现参数加密功能,相对应的加密处理器为:动态包装参数方法参数加密处理器。
2.根据权利要求1所述的一种复杂结构数据自动加密解密方法,其特征在于,数据加密解密的过程进一步包括:
数据加密:由所述数据安全加解密框架接收待进行处理的数据,触发对应的参数加密处理器;
执行参数加密处理器获取加密字段,并调用数据加解密处理器执行链加密数据;
将加密后的数据存储数据库中;
数据解密:读取数据库中待进行解密处理的数据,触发对应的结果解析器;
执行结果解析器获取解密字段,并调用数据加解密处理器执行链解密数据;
将解密后的数据输出。
3.根据权利要求2所述的一种复杂结构数据自动加密解密方法,其特征在于,所述参数加密处理器通过预设对应的处理函数类,进行不同数据类型的参数加密,所述处理函数类进一步包括:第一处理函数类、第二处理函数类、第三处理函数类、第四处理函数类、第五处理函数类、第六处理函数类;
各处理函数类实现参数加密功能对应的加密处理器分别为:
第一处理函数类:自定义数据库操作映射方法参数加密处理器;
第二处理函数类:Mybatis-plus框架提供的通用mapper方法参数加密处理器;
第三处理函数类:动态包装参数方法参数加密处理器;
第四处理函数类:更新方法参数加密处理器;
第五处理函数类:继承第二处理函数类的参数加密处理器;
第六处理函数类:无参数处理情况下的参数加密处理器;
所述第三处理函数类继承了第二处理函数类,负责为参数和条件语句是动态的数据库操作映射方法提供加密支持。
4.根据权利要求2所述的一种复杂结构数据自动加密解密方法,其特征在于,在所述数据加解密处理器执行链执行加密数据和解密数据的过程中,还进一步调用定制化的逻辑处理器;所述逻辑处理器包括加解密前置处理器和加解密后置处理器。
5.根据权利要求2所述的一种复杂结构数据自动加密解密方法,其特征在于,在加密数据和解密数据的过程中,通过数据读取和数据写入,将产生的临时数据置于缓存中心中;
当未能加载到存储在缓存中心的元数据信息时,采用反射机制对获取到的数据进行解析,并将解析结果存储至缓存中心用于作为下一次读取的元数据;
所述元数据包括:方法的参数列表、返回结果类型信息。
6.根据权利要求1所述的一种复杂结构数据自动加密解密方法,其特征在于,所述缓存中心用于存储加密解密过程中的数据处理结果,以及作为加密解密过程中的回调依据;
回调处理的执行情况包括:第一种情况,系统组件第一次查询时,缓存中没有该数据,则执行回调;第二种情况,缓存数据超时未被加载时自动失效,系统组件下一次查询该数据时,执行回调。
7.根据权利要求1所述的一种复杂结构数据自动加密解密方法,其特征在于,所述缓存中心还包括:热点数据查询功能、有效期控制功能和容量控制功能;
所述热点数据包括:Mapper元数据缓存、Mapper参数加密处理器对象、Mapper结果解析器对象、Java Bean解密属性和Java Bean加密属性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210228385.1A CN114297699B (zh) | 2022-03-10 | 2022-03-10 | 一种复杂结构数据自动加密解密方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210228385.1A CN114297699B (zh) | 2022-03-10 | 2022-03-10 | 一种复杂结构数据自动加密解密方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114297699A CN114297699A (zh) | 2022-04-08 |
CN114297699B true CN114297699B (zh) | 2022-06-14 |
Family
ID=80978713
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210228385.1A Active CN114297699B (zh) | 2022-03-10 | 2022-03-10 | 一种复杂结构数据自动加密解密方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114297699B (zh) |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7587595B2 (en) * | 2005-05-13 | 2009-09-08 | Intel Corporation | Method and apparatus for providing software-based security coprocessors |
US8503459B2 (en) * | 2009-05-05 | 2013-08-06 | Citrix Systems, Inc | Systems and methods for providing a multi-core architecture for an acceleration appliance |
CN107743133B (zh) * | 2017-11-30 | 2020-06-09 | 中国石油大学(北京) | 移动终端及其基于可信安全环境的访问控制方法和系统 |
CN111079188B (zh) * | 2019-12-27 | 2022-04-15 | 苏州海管家物流科技有限公司 | mybatis字段加密解密装置及加密解密系统 |
CN111753320A (zh) * | 2020-06-23 | 2020-10-09 | 深圳壹账通智能科技有限公司 | 基于拦截器的数据加密方法、装置及计算机设备 |
-
2022
- 2022-03-10 CN CN202210228385.1A patent/CN114297699B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN114297699A (zh) | 2022-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11392586B2 (en) | Data protection method and device and storage medium | |
US10754628B2 (en) | Extracting web API endpoint data from source code to identify potential security threats | |
US20160188656A1 (en) | Sophisticated run-time system for graph processing | |
CN106778351B (zh) | 数据脱敏方法及装置 | |
US5606699A (en) | Storing and querying execution information for object-oriented programs | |
US20150121533A1 (en) | Dynamic analysis interpreter modification for application dataflow | |
US20190220387A1 (en) | Unexplored branch search in hybrid fuzz testing of software binaries | |
US9779266B2 (en) | Generation of analysis reports using trusted and public distributed file systems | |
CN105808323A (zh) | 一种虚拟机创建方法及系统 | |
CN110489315B (zh) | 一种操作请求的跟踪方法、跟踪装置及服务器 | |
US11816234B2 (en) | Fine-grained privacy enforcement and policy-based data access control at scale | |
CN110347374B (zh) | 一种富客户端业务服务封装和调用系统、方法和装置 | |
CN111475543A (zh) | 一种模糊搜索方法、装置、计算机设备及存储介质 | |
CN114817974A (zh) | 动态数据脱敏方法及系统、数据安全处理方法及系统 | |
WO2006113107A1 (en) | Configurable functionality chaining | |
CN115408193A (zh) | 多模块间错误码处理方法及装置 | |
CN114297699B (zh) | 一种复杂结构数据自动加密解密方法及系统 | |
US11556839B1 (en) | Auditing system for machine learning decision system | |
CN117632395A (zh) | 工作流处理方法、装置、设备、存储介质和程序产品 | |
CN113742171B (zh) | 一种容器的gpu进程统计方法和装置 | |
Antelmi et al. | The SWH-Analytics Framework | |
US11809425B1 (en) | Function memoization in query processing system | |
KR101921123B1 (ko) | 메시지의 필드 인덱싱 방법 | |
Loker et al. | A unified model of aspect-instantiation policies | |
CN117668050A (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 |