Mybatis plus 数据加密

Mybatis plus 数据加密Mybatisplus数据加密

Mybatis

数据加密重中之重个铁铁

先准备加解密工具类

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 { 
   
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException { 
   
        preparedStatement.setString(i, DES.encrypt((String)o));
    }

    @Override
    public Object getNullableResult(ResultSet resultSet, String s) throws SQLException { 
   
        String columnValue = resultSet.getString(s);
        return DES.decrypt(columnValue);
    }

    @Override
    public Object getNullableResult(ResultSet resultSet, int i) throws SQLException { 
   
        String columnValue = resultSet.getString(i);
        return DES.decrypt(columnValue);

    }

    @Override
    public 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 数据加密分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/28820.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注