基于MyBatis框架针对敏感字符处理

背景和目的:保护敏感数据的隐私和安全许多组织都已确立了保护措施,也逐渐形成了行业标准与法律规范。

功能需求:目前**在许多场景下,个人身份信息敏感数据都需要被保护起来,以防止未经授权的访问和滥用。数据脱敏可以帮助**满足合规要求,减少数据泄露,从而保护用户的隐私。

以下是几种常见的数据脱敏方法:

  1. 加密脱敏:使用加密算法对敏感数据进行加密处理,只有授权的用户才能解密还原数据。常见的加密算法包括对称加密算法(如AES)和非对称加密算法(如RSA)。加密算法可以提供较高的数据安全性,只有掌握密钥的人才能解密数据。同时可以根据需要选择不同的加密算法和密钥长度,以满足不同安全级别的需求。
  2. 哈希脱敏:使用哈希函数将敏感数据转化为固定长度的哈希值。哈希函数是不可逆的,即无法从哈希值还原出原始数据。常见的哈希算法有MD5、SHA-1、SHA-256等。
  3. 掩码脱敏:只显示敏感数据的部分信息,隐藏其他部分。例如,只显示银行卡号的前几位和后几位,中间部分用特定符号代替。相比加密脱密,掩码脱敏的安全性较低,因为部分敏感信息仍然可以被推断出来,同时脱敏后的数据无法还原为原始数据,可能会影响某些业务功能的实现。
  4. 替换脱敏:将敏感数据替换为特定的符号或者随机生成的数据。例如,将手机号码中的数字替换为"X"或者随机生成一个新的手机号码。替换脱敏会将原始数据中的敏感信息替换为虚拟数据,可能导致部分数据丢失,影响数据的完整性和可用性,破坏数据之间的关联性,使得原本有关联的数据在脱敏后无法再进行有效的关联分析。

系统架构:针对数据的效果和质量,采用前端掩码脱敏与后端加密脱敏两种方式结合使用,确保脱敏后数据的可用性和准确性,提供更全面的数据保护。后端加密脱敏对用户输入的敏感数据进行加密处理,将明文数据转换为密文数据存储在数据库中。前端掩码脱敏在前端页面上对用户输入的敏感数据进行掩码处理,将真实数据部分或全部替换为特定字符(如星号或其他符号)。这样可以防止他人在用户输入时窥视到真实数据,增加了用户的隐私保护。

        脱敏操作会对原始数据进行修改或替换,因此需要确保脱敏后的数据与原始数据之间的一致性,避免对系统的响应时间和资源消耗造成过大的影响,同时需要考虑如何保留脱敏前后的数据关联信息,以便进行数据溯源和分析。基于MyBatis的工具类MyBatis-Plus它提供了许多便捷的功能和特性,其中包括拦截器的配置。

        第一种方式:创建一个实现了Interceptor接口的自定义拦截器类,在拦截器类中重写intercept方法,在该方法中在插入或更新数据之前对需要加密的字段进行加解密操作。

        第二种方式:自定义注解标记需要进行加密的字段(其实实现原理就是第一种方式,只不过加了相对来说更灵活的扩展),在插入或更新数据之前对需要加密的字段,在输出数据时拦截器进行解密。拦截器可以实现MyBatis的Interceptor接口,并重写intercept方法。在intercept方法中,可以通过反射获取被@Encrypt注解标记的字段,并进行加密或解密操作。

        第三种方式:基于MyBatis框架自定义TypeHandle(敏感字符串类型处理器)适用于在MyBatis框架中对特定类型的数据进行处理。在<typeHandler>标签中,需要配置以下属性:

        javaType:指定Java对象的类型,可以是Java基本类型、Java类或者Java接口。

        jdbcType:指定数据库字段的类型,可以是JDBC的数据类型。

        handler:指定自定义TypeHandler的类名。

并重写其中的方法。常用的方法包括:

        setParameter:将Java对象转换为数据库字段类型,并设置PreparedStatement中。

        getResult:从ResultSet中获取数据库字段值,并将其转换为Java对象。

        getNullableResult方法:该方法用于获取可空结果,可以对数据库中存储的可空敏感字符串进行解密、还原或其他处理操作。

        isSensitive方法:该方法用于判断字符串是否为敏感字符串,可以根据自定义的敏感词库或规则判断字符串是否属于敏感字符串。

        第四种方式:明文映射表-先解密再查询。新建一张映射表,存储敏感字段解密后的数据与目标表主键的映射表,需要模糊查询的时候,先对明文映射表进行模糊查询,得到符合条件的目标数据的主键,再返回来根据主键查询目标表。

        以上四种方式中:建议选取第三种方式自定义TypeHandler可以将脱敏逻辑封装在一个独立的组件中,在数据库中存储的敏感数据可能是字符串类型,而在Java对象中可能是其他类型,如整数、日期等。自定义TypeHandler可以将数据库字段的值转换为Java对象需要的类型,并在写回数据库时进行相应的解密或替换转换。方式一与方式二适用于对整个系统中的方法进行统一处理;方式四使用明文映射表来存储解密后的敏感字段,实际上相当于敏感字段没有加密存储,与最被要对敏感字段加密的初衷相违背,因此不推荐在生产中使用这种方法,同时模糊查询的过程是在内存中进行的,如果数据量特别大,很容易导致内存溢出。

针对前后端分离采用:对称性加密,保证数据在加密和解密过程中不会发生损坏或丢失。前端页面上对用户输入的敏感数据进行掩码处理,将真实数据部分或全部替换为特定字符(如星号或其他符号),与后端通信内容进行加密传递,确保只有合法的接收方能够解密和读取数据。数据库层面采用mysql的AES_ENCRYPT和AES_DECRYPT函数用于对数据进行AES加解密,保证前后端统一性。

历史数据处理:表备份,涉及字段进行加密刷新落库。

  • 24
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值