Mybatis plus 数据加密
数据加密重中之重个铁铁
先准备加解密工具类
package com.byyl.web.utils;import org.springframework.util.Base64Utils;import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.security.SecureRandom;/*** DES加密工具类*/
public class DES {private static final String algorithm = "DES";private static final String key = "sssss";/*** 加密** @return* @throws Exception*/public static String encrypt(String data){try {byte[] bt = encrypt(data.getBytes(), key.getBytes());return Base64Utils.encodeToString(bt);}catch (Exception e){return null;}}/*** 解密** @return* @throws Exception*/public static String decrypt(String data){if (data == null) return null;try{byte[] bt = decrypt(Base64Utils.decodeFromString(data), key.getBytes());return new String(bt);}catch (Exception e){return null;}}/*** 根据键值进行加密*/private static byte[] encrypt(byte[] data, byte[] key) throws Exception {return initCipher(data, key, Cipher.ENCRYPT_MODE);}/*** 根据键值进行解密*/private static byte[] decrypt(byte[] data, byte[] key) throws Exception {return initCipher(data, key, Cipher.DECRYPT_MODE);}public static byte[] initCipher(byte[] data, byte[] key, int decryptMode) throws Exception {/** 生成一个可信任的随机数源 **/SecureRandom sr = new SecureRandom();/** 从原始密钥数据创建DESKeySpec对象 **/DESKeySpec dks = new DESKeySpec(key);/** 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 **/SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(algorithm);/** 将DESKeySpec对象转换成SecretKey对象 **/SecretKey securekey = keyFactory.generateSecret(dks);/** Cipher对象实际完成加密或解密操作 **/Cipher cipher = Cipher.getInstance(algorithm);/** 用密钥初始化Cipher对象 **/cipher.init(decryptMode, securekey, sr);return cipher.doFinal(data);}public static void main(String[] args) throws Exception {// 待加密内容String data = "helloworld";// 密码,长度要是8的倍数//加密String str = DES.encrypt(data);System.out.println(str);//解密System.out.println(DES.decrypt(str));}
}
编写自定义加解密Handler类继承 BaseTypeHandler
package com.byyl.web.config;import com.byyl.web.utils.DES;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;/*** 配置mybatis 敏感数据加密*/
public class DesEncryptHandler extends BaseTypeHandler {@Overridepublic void setNonNullParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException {preparedStatement.setString(i, DES.encrypt((String)o));}@Overridepublic Object getNullableResult(ResultSet resultSet, String s) throws SQLException {String columnValue = resultSet.getString(s);return DES.decrypt(columnValue);}@Overridepublic Object getNullableResult(ResultSet resultSet, int i) throws SQLException {String columnValue = resultSet.getString(i);return DES.decrypt(columnValue);}@Overridepublic Object getNullableResult(CallableStatement callableStatement, int i) throws SQLException {String columnValue = callableStatement.getString(i);return DES.decrypt(columnValue);}
}
类中使用
@Data
@EqualsAndHashCode(callSuper = false)
//autoResultMap = true 要有否则查询时无法解密
@TableName(value = "vd_patient",autoResultMap = true )
@ApiModel(value="VdPatient对象")
public class VdPatient implements Serializable {//typeHandle设置成自己编写的DesEncryptHandler @TableField(typeHandler = DesEncryptHandler.class)private String idCard;
}
Mybatis plus 数据加密相关推荐
- 如何使用Mybatis的拦截器实现数据加密与解密
点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 转载自公众号:日拱一兵 关注我,回复口令获取可获取独家整理的学习资料: - 001 :领取<Sp ...
- MyBatis 一个简单配置搞定数据加密解密!
欢迎关注方志朋的博客,回复"666"获面试宝典 前言:介绍一个简单的MyBatis加解密方式,日常学习工作中提及这种方法的比较少,所以拿来说说,如果已经知道这种方法的忽略本文! 一 ...
- 扔掉工具类,Mybatis一个简单配置搞定数据加密解密!
今日推荐 推荐 20 款 IDEA 主题!开源困境:Log4j2 维护者发声:没有工资,还要挨骂!!RedisJson 横空出世,性能碾压ES和Mongo!还在发愁写API文档?推荐一款阿里腾讯都在用 ...
- MyBatis之如何解决数据库数据加密解密
前言:介绍一个简单的MyBatis加解密方式,日常学习工作中提及这种方法的比较少,所以拿来说说,如果已经知道这种方法的忽略本文 一.背景 在我们数据库中有些时候会保存一些用户的敏感信息,比如:手机号. ...
- 犯罪心理解读Mybatis拦截器
原文链接:"犯罪心理"解读Mybatis拦截器 Mybatis拦截器执行过程解析 文章写过之后,我觉得 "Mybatis 拦截器案件"背后一定还隐藏着某种设计动 ...
- 基于mybatis Interceptor的对 user_cache 表 address id_no 两个字段的加密解密;
2019独角兽企业重金招聘Python工程师标准>>> 软件版本 idea 2017.2 mybatis:3.2.8 java version "1.8.0_51" ...
- MyBatis知多少(8)关系型数据库
MyBatis的存在就是为了简化对关系数据库的访问.数据库的确非常复杂,要正确地使用它们需要做很多的工作.数据库负责管理数据和修改数据.我们使用数据库而不简简单单地使用一个 平板文件的原因就在于数据库 ...
- ShardingSphere JDBC 分库分表 读写分离 数据加密
简介 在上篇文章中,在本地搭建了运行环境,本地来体验下ShardingSphere JDBC的三个功能:分库分表.读写分离.数据加密 示例运行 首先把概念先捋一捋,参考下面的文档: 数据分片 读写分离 ...
- Mybatis拦截器安全加解密MySQL数据实战
需求背景 公司为了通过一些金融安全指标(政策问题)和防止数据泄漏,需要对用户敏感数据进行加密,所以在公司项目中所有存储了用户信息的数据库都需要进行数据加密改造.包括Mysql.redis.mongod ...
最新文章
- Linux下Shell日期的格式
- 四款 5G 版 iPhone 12 齐发,支持北斗系统,你准备好了吗?
- Google实用搜索秘技六则
- 函数粘合云服务提供端到端解决方案
- C# winform DataGridView 属性说明
- C#TreeView控件
- android+ebook控件,Android 自定义控件 eBook 翻书效果
- python断点调试_「Python调试器」,快速定位各种疑难杂症!!!
- STL11-stack容器
- matlab画圆的命令_matlab画半圆
- 转:jquery选择器的使用方法
- Android_L(64bit) 模拟器配置及创建项目
- HTTP中ip地址伪造的问题以及解决办法
- 网关做第n级拓扑的dns
- 94% Asset Optimization
- 算法竞赛入门经典(第2版)紫书代码仓库-链接
- 荣耀6 android 7.0,依旧荣耀--荣耀6 升级到 荣耀7 智能手机
- Pytorch加载.pth文件
- 科学家与艺术家心中都装着什么
- 区块链智能资产的“硬链接”思考