Git Product home page Git Product logo

desensitization's Introduction

desensitization

基于Java反射api、简单易用、支持任意数据结构的数据脱敏库,包含但不限于以下类型的数据脱敏

  • 邮箱
  • 手机号码
  • 中文名称
  • 身份证号码
  • 银行卡号码
  • 密码
  • 级联脱敏
  • 自定义注解脱敏

用法

JDK版本

desensitization是基于JDK21开发的,JDK1.8及以上版本请参考该使用指南

maven依赖

<dependency>
    <groupId>red.zyc</groupId>
    <artifactId>desensitization</artifactId>
    <version>3.0.0</version>
</dependency>

例子

对象域值脱敏

下面是一个Child类,其中包含了一些敏感数据字段以及一些嵌套的敏感数据字段

public class Child {

    @ChineseName
    public String name = "小明";

    @PhoneNumber
    public String phoneNumber = "19962000001";

    @Password
    public String password = "123456789";

    @Cascade
    public Father father;    

}

只需要在敏感数据字段上标记相应类型的敏感注解,例如@ChineseName@Password等注解, 如果这个数据字段是需要级联脱敏的对象,只需要在该字段上标注@Cascade注解, 最后调用以下方法即可擦除对象中的所有敏感信息并返回一个新的Child对象。

var child = Sensitive.desensitize(new Child());

值脱敏

可能你的敏感信息是一个字符串类型的值或者是一个CollectionArrayMap之类的值,同样擦除它们的敏感信息也很简单

void desensitize() {

    // String
    var v1 = Sensitive.desensitize("[email protected]", new AnnotatedTypeToken<@Email String>() {
    });
    assert "1*****@qq.com".equals(v1);

    // Collection
    var v2 = Sensitive.desensitize(Stream.of("[email protected]").collect(Collectors.toList()), new AnnotatedTypeToken<List<@Email String>>() {
    });
    v2.forEach(s -> {
        assert "1*****@qq.com".equals(s);
    });

    // Array
    var v3 = Sensitive.desensitize(new String[]{"[email protected]"}, new AnnotatedTypeToken<@Email String[]>() {
    });
    Arrays.stream(v3).forEach(s -> {
        assert "1*****@qq.com".equals(s);
    });

    // Map
    var v4 = Sensitive.desensitize(Stream.of("张三").collect(Collectors.toMap(s -> s, s -> "[email protected]")), new AnnotatedTypeToken<Map<@ChineseName String, @Email String>>() {
    });
    v4.forEach((s1, s2) -> {
        assert "张*".equals(s1);
        assert "1*****@qq.com".equals(s2);
    });
}

在上面的例子中我们只需要构造脱敏对象的AnnotatedTypeToken以便我们能够准确的捕获被脱敏对象的实际类型和相应的敏感注解。

原理

desensitization是基于annotation-parser库来解析任意数据结构中自定义敏感注解的,详细信息可以查看该工程介绍。

扩展

如果你的应用是基于spring-boot搭建的,并且你不想在代码中每次都手动调用脱敏方法对数据进行脱敏处理,那么desensitization-spring-boot 这个starter可能会对你有很大的帮助,详细信息可以查看该工程介绍。

License

Apache License 2.0

desensitization's People

Contributors

allurx avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

desensitization's Issues

PhoneNumberDesensitizer对长度不足3的字符串脱敏抛出异常

String phone = "a";
String phone2 = Sensitive.desensitize(phone, new TypeToken<@PhoneNumberSensitive String>() {});
System.out.println(phone2);

会抛出异常:
Exception in thread "main" java.lang.IllegalArgumentException: startOffset: 3, endOffset: 4, target: a

分析:
AbstractCharSequenceDesensitizer.desensitize 对于startOffset >= str.length()的都会抛出错误

建议:
增强脱敏注解的鲁棒性,例如如下场景,从数据库中读出大量的电话号码,可能某些脏数据,电话号码长度为“”, 电话长度不足,此时脱敏不应该抛出异常,而是另外方式,例如:全部替换为占位符,或不处理。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.