data_masker 1.0.0
data_masker: ^1.0.0 copied to clipboard
Pure Dart data masking library for sensitive data anonymization. Supports phone, email, ID card, bank card and custom rules.
example/data_masker_example.dart
import 'package:data_masker/data_masker.dart';
void main() {
print('=== data_masker 完整示例 ===\n');
_testMaskStrategy();
_testMaskConfig();
_testPresetRules();
_testCustomRules();
_testDataTypes();
_testMaskUtils();
_testRealWorldScenario();
}
void _testMaskStrategy() {
print('1. MaskStrategy(掩码策略)');
const config = MaskConfig(enabled: true, maskChar: '*');
print(' full: ${MaskUtils.applyMask('1234567890', MaskStrategy.full, 4, null, config)}');
print(' keepPrefix: ${MaskUtils.applyMask('1234567890', MaskStrategy.keepPrefix, 3, null, config)}');
print(' keepSuffix: ${MaskUtils.applyMask('1234567890', MaskStrategy.keepSuffix, 4, null, config)}');
print(' keepBoth: ${MaskUtils.applyMask('1234567890', MaskStrategy.keepBoth, 3, null, config)}');
print('');
}
void _testMaskConfig() {
print('2. MaskConfig(配置项)');
final defaultConfig = MaskConfig(enabled: true);
final customConfig = MaskConfig(
enabled: true,
maskChar: '#',
maxMaskLength: 10,
caseSensitive: true,
);
print(' 默认配置: maskChar=${defaultConfig.maskChar}, maxMaskLength=${defaultConfig.maxMaskLength}');
print(' 自定义配置: maskChar=${customConfig.maskChar}, maxMaskLength=${customConfig.maxMaskLength}');
print('');
}
void _testPresetRules() {
print('3. PresetMaskRules(预设规则)');
const config = MaskConfig(enabled: true);
print(' 手机号: ${PresetMaskRules.phone().apply('13812345678', config)}');
print(' 邮箱: ${PresetMaskRules.email().apply('user@example.com', config)}');
print(' 身份证: ${PresetMaskRules.idCard().apply('110101199001011234', config)}');
print(' 银行卡: ${PresetMaskRules.bankCard().apply('6222021234567890123', config)}');
print(' IP地址: ${PresetMaskRules.ipAddress().apply('192.168.1.100', config)}');
print(' URL: ${PresetMaskRules.url().apply('https://example.com/api/users', config)}');
print('');
}
void _testCustomRules() {
print('4. 自定义规则');
const config = MaskConfig(enabled: true);
final fieldRule = FieldMaskRule(fieldNames: ['password', 'token']);
print(' FieldMaskRule 匹配 password: ${fieldRule.matches('password', 'secret')}');
print(' FieldMaskRule 匹配 username: ${fieldRule.matches('username', 'test')}');
final regexRule = RegexMaskRule(
pattern: RegExp(r'\d{6,8}'),
strategy: MaskStrategy.keepBoth,
keepCount: 3,
);
print(' RegexMaskRule: ${regexRule.apply('编号: 12345678', config)}');
final customRule = CustomMaskRule(
matcher: (key, value) => key?.toString() == 'custom_field',
formatter: (value) => '[MASKED: $value]',
);
print(' CustomMaskRule: ${customRule.apply('sensitive data', config)}');
print('');
}
void _testDataTypes() {
print('5. 支持的数据类型');
final masker = DataMasker(MaskConfig(
enabled: true,
rules: [
PresetMaskRules.phone(),
PresetMaskRules.email(),
FieldMaskRule(fieldNames: ['password']),
],
));
final stringResult = masker.process('联系电话:13812345678,邮箱:user@example.com');
print(' String: $stringResult');
final mapResult = masker.process({
'username': 'test',
'password': 'secret123',
'phone': '13812345678',
});
print(' Map: $mapResult');
final listResult = masker.process([
{'name': 'Alice', 'email': 'alice@example.com'},
{'name': 'Bob', 'email': 'bob@example.com'},
]);
print(' List: $listResult');
final nestedResult = masker.process({
'user': {
'name': 'John',
'auth': {'token': 'abc123xyz'}
},
'contacts': [
{'phone': '13987654321'},
],
});
print(' 嵌套结构: $nestedResult');
print('');
}
void _testMaskUtils() {
print('6. MaskUtils(工具方法)');
const config = MaskConfig(enabled: true, maskChar: '#');
final result1 = MaskUtils.applyMask(
'1234567890',
MaskStrategy.keepBoth,
3,
null,
config,
);
print(' applyMask: $result1');
final result2 = MaskUtils.applyMask(
'secret',
MaskStrategy.full,
4,
'[HIDDEN]',
config,
);
print(' customMask: $result2');
print('');
}
void _testRealWorldScenario() {
print('7. 真实场景示例');
final apiResponse = {
'code': 200,
'message': 'success',
'data': {
'user': {
'id': 123,
'name': '张三',
'phone': '13812345678',
'email': 'zhangsan@company.com',
'idCard': '110101199001011234',
'bankCard': '6222021234567890123',
},
'session': {
'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9',
'expireTime': '2024-12-31 23:59:59',
},
},
};
final masker = DataMasker(MaskConfig(
enabled: true,
rules: [
PresetMaskRules.phone(),
PresetMaskRules.email(),
PresetMaskRules.idCard(),
PresetMaskRules.bankCard(),
PresetMaskRules.commonFields(),
],
));
final maskedResponse = masker.process(apiResponse);
print(' API 响应脱敏:');
print(' $maskedResponse');
}