https://github.com/eltonsandre/mask-utils
Utils para gerar ofuscação e mascaramento em dados e campos de objetos. A ideia do projeto é mascarar e/ou ofuscar dados sensíveis, como credenciais, dado PCI DSS, PII e outros que possam fazer sentido. A ofuscação acontece via anotação do campo e baseada em replace utilizando regex.
https://github.com/eltonsandre/mask-utils
Last synced: 8 months ago
JSON representation
Utils para gerar ofuscação e mascaramento em dados e campos de objetos. A ideia do projeto é mascarar e/ou ofuscar dados sensíveis, como credenciais, dado PCI DSS, PII e outros que possam fazer sentido. A ofuscação acontece via anotação do campo e baseada em replace utilizando regex.
- Host: GitHub
- URL: https://github.com/eltonsandre/mask-utils
- Owner: eltonsandre
- License: apache-2.0
- Created: 2020-03-09T18:13:52.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2022-01-09T03:02:34.000Z (over 4 years ago)
- Last Synced: 2024-12-28T03:44:13.748Z (over 1 year ago)
- Language: Java
- Homepage:
- Size: 35.2 KB
- Stars: 3
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# mask-utils
Utils para gerar ofuscação e mascaramento em dados e campos de objetos.
A ideia do projeto é mascarar e/ou ofuscar dados sensiveis, como credenciais,
dados [PCI DSS](https://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard)
, [PII](https://pt.wikipedia.org/wiki/Informa%C3%A7%C3%A3o_pessoalmente_identific%C3%A1vel) e outros que possam fazer sentido.
A ofuscação acontece via anotação do campo e baseada em replace utilizando regex.
**_Funciona somente para tipos String._**
### Gradle
```groovy
//build.gradle
dependencies {
implementation 'com.github.eltonsandre.utils:mask-utils:1.0.1'
}
```
### Maven
```xml
//pom.xml
com.github.eltonsandre.utils
mask-utils
1.0.1
```
---
### **Anotações**
#### @MaskField: _Mascara o valor do campo de tipo String._
- **remove:** _Remove o valor do campo._
- **regex:** _Expreção regular em que o campo será mascarado_.
- **replacement:** _valor ou regex em que o campo será mascarado._
- **namesGroup:** _nome do grupo para qual grupo o campo será mascarado._
#### @MaskGroups - Anotação para marcar atributo com grupos de ofuscação.
#### @MaskObjectData - Anotação para marcar atributo como tipo complexo acessar atributos e ofuscar.
#### @MaskCollectonData - Anotação para marcar atributo como coleção para interar e ofuscar os campos e objetos anotados.
---
### Exemplos de uso:
o exempo mostra mascarameto de um dado [PII](https://pt.wikipedia.org/wiki/Informa%C3%A7%C3%A3o_pessoalmente_identific%C3%A1vel) do campo para o
grupo **'dado.pii'**:
```java
public class Cliente {
...
@MaskField(regex = "(^[^@]{3}).*", replacement = "$1.***.***-**", namesGroup = {"dado.pii"})
private String cpf;
...
}
```
```java
public class Cliente {
public Cliente recuperaDadosCliente(final String id) {
//codigo ...
final Cliente clienteOfuscado = (Cliente) MaskUtils.mask(cliente, "dado.pii");
//codigo ...
return clienteOfuscado;
}
}
```
#
---
Mascaramento por grupo:
no exemplo poderá ser mascarado pelo default, isto é sem grupo ou passando o grupo, no caso dado.pii
```java
public class Cliente {
...
@MaskGroups({
@MaskField(regex = "(^[^@]{4}).*@[^.]*(\..*)", replacement = "$1******@****$2"),
@MaskField(regex = "(^[^@]{4}).*@[^.]*(\..*)", replacement = "$1******@******",
namesGroup = {"dado.pci"})
})
private String email;
...
}
class ExemploParaGrupo {
public Cliente mascarar(final Cliente cliente, final boolean semGrupo) {
cliente.setEmail("test.mask@mock.com");
if (semGrupo) {
/*default sem grupo*/
return MaskUtils.mask(cliente);
// resultado: email=test******@****.com
}
/*Passando grupo*/
return MaskUtils.mask(cliente, "dado.pii");
// resultado: email=test******@******
}
}
```
#
---
Ofuscando dados de cartões (PCI DSS)
```java
@Data
public class CartaoCredito {
private String nome;
@MaskField(regex = "^([0-9]{4})(.*)([0-9]{4})", replacement = "$1 **** **** $3",
namesGroup = {"dado.pci"})
private String numero;
@MaskField(namesGroup = {"dado.pci"})
private String cvv;
@MaskField(namesGroup = {"dado.pci"})
private String anoValidade;
@MaskField(namesGroup = {"dado.pci"})
private String mesValidade;
}
```
```java
public class ExemploCard {
public Cartao mask() {
Cartao cartao = Cartao.builder()
.nome("John Connor")
.cvv("123")
.numero("5498 0305 8674 0032")
.anoValidade("2030")
.mesValidade("12")
.build();
return MaskUtils.mask(cartao, "dado.pci");
}
```
```
Resultado:
Cartao(
nome=John Connor,
numero=5498 **** **** 0032,
cvv=***,
anoValidade=****,
mesValidade=**
)
```
#
---
Ofuscação de Credencias (senha)
```java
@Data
public class Usuario {
@MaskField
private String username;
@MaskGroups({
@MaskField(regex = "(^[^@]{4}).*@[^.]*(\..*)", replacement = "$1******@****$2"),
@MaskField(regex = "(^[^@]{4}).*@[^.]*(\..*)", replacement = "$1******@******",
namesGroup = {"dado.pii"})
})
private String email;
@MaskField(regex = "^.*", replacement = "[SECRETO]", namesGroup = {"dado.sensivel"})
private String password;
}
```
#
---
Exemplo geral
```java
public class Cliente {
private String nome;
@MaskField(regex = "(^[^@]{3}).*", replacement = "$1.***.***-**", namesGroup = {"dado.pii"})
private String cpf;
@MaskGroups({
@MaskField(regex = "(^[^@]{4}).*@[^.]*(\..*)", replacement = "$1******@****$2"),
@MaskField(regex = "(^[^@]{4}).*@[^.]*(\..*)", replacement = "$1******@******",
namesGroup = {"dado.pci"})
})
private String email;
@MaskField(regex = "(^[^@]{4}).*", replacement = "**/**/$1", namesGroup = {"dado.pii"})
private String dataNascimento;
@MaskCollectonData
private List telefones;
@MaskObjectData
private Endereco endereco;
}
```
```java
@Data
public class Telefone {
@MaskField
private String ddi;
@MaskField
private String ddd;
@MaskGroups({
@MaskField(remove = true),
@MaskField(regex = "(^[^@]{3}).*", replacement = "$1******@******",
namesGroup = {"dado.pii"})
})
private String numero;
}
```
---
## Pull requests, novas ideias de features, colaboração e/ou issues serão muito bem-vindas.
---