data_masker 1.0.1 copy "data_masker: ^1.0.1" to clipboard
data_masker: ^1.0.1 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');
}
0
likes
160
points
92
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Pure Dart data masking library for sensitive data anonymization. Supports phone, email, ID card, bank card and custom rules.

Homepage
Repository (GitHub)
View/report issues

License

MIT (license)

More

Packages that depend on data_masker