数据脱敏 用*替代实现

一 什么是数据脱敏

数据脱敏(Data Masking),顾名思义,是屏蔽敏感数据,对某些敏感信息(比如,身份证号、手机号、卡号、客户姓名、客户地址、邮箱地址、薪资等等 )通过脱敏规则进行数据的变形,实现隐私数据的可靠保护。业界常见的脱敏规则有,替换、重排、加密、截断、掩码,用户也可以根据期望的脱敏算法自定义脱敏规则。

二 姓名脱敏小案例

  • 2.1 定长脱敏

所谓定长脱敏,就是替换的’*'的长度固定,效果如下图所示

SELECT
	CONCAT( LEFT ( real_name, 1 ), '*', RIGHT ( real_name, CHAR_LENGTH( real_name )- 2 ) ) AS username 
FROM
	sys_user;

<?php
/**
 * Notes:信息脱敏函数
 *
 * @param        $string 字符串
 * @param int    $start  开始明文长度
 * @param int    $end    结束明文长度
 * @param string $re     替换字符
 * @return string
 */
function desensitize($string, $start = 0, $end = 0, $re = '*')
{
    if (empty($string) || empty($end) || empty($re)) {
        return $string;
    }

    $strLen = strlen($string);
    if ($strLen < ($start + $end)) {
        return $string;
    }

    $strEnd = $strLen - $end;
    for ($i = 0; $i < $strLen; $i++) {
        if ($i >= $start && $i < $strEnd) {
            $str_arr[] = $re;
        } else {
            $str_arr[] = mb_substr($string, $i, 1);
        }
    }

    return implode('', $str_arr);
}
$name = '王刚';
$mobile = '13817558198';

$name = desensitize($name, 1, 1);
$mobile = desensitize($mobile, 3, 4);

var_dump($name);
var_dump($mobile);
  • 2.2 非定长脱敏

所谓非定长脱敏,就是替换的’*'长度不定,要根据姓名实时变化;

方式一

SELECT
 rpad(
  substring(u.real_name, 1, 1),
  char_length(u.real_name),
  '*'
 )
FROM
 sys_user u;

方式二

SELECT
  CONCAT( LEFT ( real_name, 1 ),  repeat('*',CHAR_LENGTH( real_name )- 1)) AS username 
FROM
  sys_user;

 

Java手机号码脱敏

public class PhoneMasking {

    public static String maskPhoneNumber(String phoneNumber) {
        if (phoneNumber == null || phoneNumber.length() <8) {
            throw new IllegalArgumentException("号码长度不够,不支持脱敏");
        }

        // 截取前三位和后四位
        String prefix = phoneNumber.substring(0, 3);
        String suffix = phoneNumber.substring(phoneNumber.length() - 4);

        // 中间部分用星号替代
        StringBuilder maskedPart = new StringBuilder();
        for (int i = 0; i < phoneNumber.length() - 7; i++) {
            maskedPart.append("*");
        }

        // 拼接脱敏后的手机号码
        return prefix + maskedPart.toString() + suffix;
    }

    public static void main(String[] args) {
        String phoneNumber = "13812345678";
        String maskedNumber = maskPhoneNumber(phoneNumber);
        System.out.println("Masked phone number: " + maskedNumber);
    }
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值