数据脱敏处理

在 PostgreSQL 中,如何实现数据脱敏处理 在 PostgreSQL 中,数据脱敏是指对敏感数据进行处理,以在不影响数据使用的前提下,保护敏感信息不被泄露。常见的数据脱敏方式包括屏蔽、加密、哈希、模糊等。下面将详细介绍几种常见的数据脱敏方法,并提供相应的示例代码和解释。 阅读详情

场景 : 数据存储到数据库时 , 除了密码 , 支付密码等敏感数据使用MD5等不可逆的方式加密外 , 其他的一些数据也需用到脱敏处理 , 如手机号 , 身份证号 , 银行卡号等 , 主要原因是当前登录用户或权限用户可能会用到此数据作为前端显示 , 此时需要使用对称加密的方式加密并解密 .

1.方式一
直接使用AES加密 , 解密 , 缺点是查询时需要遍历解密后传给前端

2.方式二
注解的方式加密解密 , 直接操作实体类
1.AES加密代码

public class AESUtil {

public static String decrypt(byte[] content, String password) {
    try {
        KeyGenerator kgen = KeyGenerator.getInstance("AES");// 创建AES的Key生产者
        kgen.init(128, new SecureRandom(password.getBytes()));
        SecretKey secretKey = kgen.generateKey();// 根据用户密码,生成一个密钥
        byte[] enCodeFormat = secretKey.getEncoded();// 返回基本编码格式的密钥
        SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");// 转换为AES专用密钥
        Cipher cipher = Cipher.getInstance("AES");// 创建密码器
        cipher.init(Cipher.DECRYPT_MODE, key);// 初始化为解密模式的密码器
        byte[] result = cipher.doFinal(content);
        String jsonResult = Base64.getEncoder().encodeToString(result);
        return jsonResult;
        // 明文
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (NoSuchPaddingException e) {
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
        e.printStackTrace();
    } catch (BadPaddingException e) {
        e.printStackTrace();
    }
    return null;
}

public static String encrypt(String content, String password) {
    try {
        KeyGenerator kgen = KeyGenerator.getInstance("AES");// 创建AES的Key生产者

        kgen.init(128, new SecureRandom(password.getBytes()));// 利用用户密码作为随机数初始化出
        // 128位的key生产者
        //加密没关系,SecureRandom是生成安全随机数序列,password.getBytes()是种子,只要种子相同,序列就一样,所以解密只要有password就行

        SecretKey secretKey = kgen.generateKey();// 根据用户密码,生成一个密钥

        byte[] enCodeFormat = secretKey.getEncoded();// 返回基本编码格式的密钥,如果此密钥不支持编码,则返回
        // null。

        SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");// 转换为AES专用密钥

        Cipher cipher = Cipher.getInstance("AES");// 创建密码器

        byte[] byteContent = content.getBytes("utf-8");

        cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化为加密模式的密码器

        byte[] result = cipher.doFinal(byteContent);// 加密

        String base64Result = Base64.getEncoder().encodeToString(result);

        System.out.println(base64Result);

        return base64Result;

    } catch (NoSuchPaddingException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
        e.printStackTrace();
    } catch (BadPaddingException e) {
        e.printStackTrace();
    }
    return null;
}

}

2.对字段加密,解密的类

public class AESHandler extends BaseTypeHandler {

@Override
public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
    ps.setString(i, AES.encrypt((String) parameter, SystemConstants.UserSalt));
}

@Override
public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
    String columnValue = rs.getString(columnName);
    return AES.decrypt(columnValue, SystemConstants.UserSalt);
}

@Override
public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
    String columnValue = rs.getString(columnIndex);
    return AES.decrypt(columnValue, SystemConstants.UserSalt);
}

@Override
public String getNullableResult(CallableStatement cs, int columnIndex)
        throws SQLException {
    String columnValue = cs.getString(columnIndex);
    return AES.decrypt(columnValue, SystemConstants.UserSalt);
}

}

3.添加对应的注解 , 实体类添加注解
关键注解 : @TableName(value=“lb_user”,autoResultMap = true)
@TableField(value = “id_card”,typeHandler = AESHandler.class)

@data
@Accessors(chain = true)
@TableName(value="lb_user",autoResultMap = true)
@ApiModel(value = "LbUserEntity对象", description = "用户基本信息表")
public class LbUsersEntity implements Serializable {
@ApiModelProperty(value = "id")
@TableId(value = "id", type = IdType.AUTO)
@JsonSerialize(using = ToStringSerializer.class)
private Long id;

@ApiModelProperty(value = "用户身份证号")
@TableField(value = "id_card",typeHandler = AESHandler.class)
private String idCard;

}

mysql数据脱敏处理方法 将生产环境数据导出至测试环境或别的环境中,需将手机号、银行卡账号、姓名、身份证号及一些业务中的敏感数据进行脱敏,在mysql中可以通过以下方法根据实际应用进行处理. DELIMITER $$ CREATE  FUNCTION `f_get_rand_number`(p_size int) RETURNS int(20)     COMMENT '取参数传入长度的随机数' BEGIN 阅读详情

相关推荐

Nginx 如何处理请求的缓存数据数据脱敏

如果现有的方法都不能满足您的需求,那还可以“自力更生”,自己开发 Nginx 模块来实现数据脱敏。这虽然难度较大,但“功夫不负有心人”,只要技术过硬,就能实现高度定制化的数据脱敏功能。

2401_86074221的博客 925

pdf实现关键字脱敏.zip

使用itextpdf,PDF实现关键字脱敏

C#实现对姓名、身份证进行数据脱敏(附完整源码)

C#实现对姓名、身份证进行数据脱敏(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 873

C#隐藏手机号、邮箱等敏感信息的实现方法

主要介绍了C#隐藏手机号、邮箱等敏感信息的实现方法的相关资料,需要的朋友可以参考下

身份证号、姓名、手机号脱敏(*隐藏关键信息)

身份证号、姓名脱敏(*隐藏关键信息)

工作中遇到问题记录 1060

C# 牵手DeepSeek API:开启智能编程新旅程

通过本文的介绍,我们深入了解了如何使用 C# 实现对 DeepSeek API 的调用。从前期准备工作,包括注册账号获取 API 密钥以及安装必要的库,到实际的代码编写,如创建 HTTP 客户端、构建请求和发送以及处理响应数据,每一个步骤都为我们在 C# 项目中集成强大的自然语言处理能力奠定了基础。在常见问题与解决方案部分,我们学习了如何处理调用过程中可能出现的错误,以及如何进行性能优化,确保调用的稳定性和高效性。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2438

c#如何优雅实现数据加密存储、模糊匹配和脱敏

C#可以使用以下方式优雅实现数据加密存储、模糊匹配和脱敏数据加密存储:可以使用C#内置的加密类库,如System.Security.Cryptography命名空间下的类。可以使用对称加密算法(如AES)或非对称加密算法(如RSA)对数据进行加密,再存储到数据库或文件中。在读取数据时,需要先进行解密操作。模糊匹配:可以使用C#内置的字符串匹配类库,如System.Text.RegularExpr...

dotNET跨平台 1509

常用的脱敏方法

代码常用的脱敏方法。

qq_45585640的博客 1710

PHP 数据脱敏显示,数据脱敏处理

什么是脱敏数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。简单来说就是你有些数据并不想让别人看见,需要进行处理再显示在页面上。项目中如何脱敏数据一般我们得到的数据基本上是从数据库中获得的,例如存在数据库中的手机号,不能泄露信息,就需要进行脱敏,那我们查出来的时候就要调用脱敏数据的方法,从而达到我们的目的。public class DataConcealUtil {...

weixin_28902341的博客 2534

SpringBoot敏感数据脱敏怎么处理

使用日志框架(如Logback或Log4j2)的替换规则,避免敏感信息写入日志。通过组合以上方法,可系统性地保护敏感数据,满足GDPR等数据安全法规要求。使用加密工具(如Jasypt)对敏感字段进行加密存储。实现数据脱敏,适合接口返回敏感数据时动态处理。通过自定义注解和Jackson的。

w2369110547的博客 987

有关数据脱敏处理

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34205076的博客 796

关于数据脱敏的两种解决方案之二基于springmvc json处理时候的数据脱敏

接上一篇 关于数据脱敏的两种解决方案之一基于mybatis Interceptor的脱敏 这里只写基于springmvc json处理类 继承alibaba.fastjson import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.List;...

傻根她弟 2445

记生产问题: api 接口数据脱敏处理

脱敏?简单来讲就是隐藏关键信息.比如完整的手机号变成了 135******57. 这就是数据脱敏的一种. 脱敏后的数据又大致分为不可逆和可逆.上边手机号就是不可逆的,可逆的就是有一套对称加密规则.通过规则可以对脱敏数据进行还原.

u011962508的博客 605

【项目】对身份证、手机号码、银行卡信息进行脱敏处理

数据库保留脱敏后的数据,通过工具类隐藏敏感信息 通过截取字符串的方式 数据库保留不脱敏数据,对返回给前端结果进行脱敏处理 对查询的结果进行脱敏处理 通过sql数据脱敏 mysql官方文档,使用内置函数进行脱敏处理 CONCAT()、LEFT()和RIGHT()字符串函数组合使用 CONCAT(str, str, str…):返回连接的字符串(其中不能未null,否则返回结果就null) LEFT(str, len):返回指定的最左边的字符数(str:字符串,len:长度) RIGHT(str, le

源僧 2887

姓名脱敏,名字长度大于1的后面的加*处理

姓名脱敏,名字长度大于1的后面的加*处理

qq_45343541的博客 673

c#姓名脱敏

【代码】c#姓名脱敏

shaojiashun的博客 210
上一篇: swagger2的使用java集成
Shine-long
博客等级 码龄6年 1粉丝 12原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值