在当今数字化时代,数据的处理和保护至关重要。常常需要进行脱敏处理以保护用户隐私,但在特定需求下又要能准确还原,以下就为大家介绍一种手机号机密脱敏还原方案。
一、手机号脱敏的必要性
在企业的数据管理流程中,无论是为了满足数据共享时的合规性要求,还是防止内部数据处理过程中的意外泄露风险,对手机号进行脱敏处理都是必不可少的举措。
二、常见的手机号脱敏方式
部分隐藏替换这种方式是将手机号的中间几位数字用特定符号(如星号 “”)进行替换。例如,将手机号 13812345678 处理成 138***5678。这样在展示数据时,既能保留手机号的大致结构,又能有效隐藏关键部分的信息,防止他人直接获取完整手机号。
三、手机号机密脱敏还原方案
可采用对称加密算法(如 AES),其有多种加密模式,小编用的是 AES-ECB 方案。在该模式下,相同明文数据块用相同密钥加密,密文结果相同,比如对同一手机号多次加密(密钥不变),密文始终一致。
具体操作:
把明文手机号字符串替换成 186****456。
对明文手机号字符串进行 AES-ECB 加密。
在数据表 user 中,添加 phone、phone_encrypt 两个字段用于存储。
四、手机号登录 可通过对称加密算法 AES-ECB 得到的密文,去数据库里查询 phone_encrypt 并进行比较。接着查询此用户信息,以开展下一步逻辑操作。
五、手机号还原
对 phone_encrypt 密文采用 AES 解密,使用相同密钥,按特定逆变换步骤把密文还原成明文。
六、关于 AES 密钥 key 在 AES(高级加密标准)里,常见密钥长度规格有 128 位、192 位和 256 位。
我们可以随机生成一个 32 位的字符串:HUcISqfqAOe2ASWNpe3t9EfFc1V6T3N0,并且将它作为加密所使用的密钥哦。接下来,还有其他相关内容可以继续了解呢。
我采用的另外一种方案,是系统预先设置好的通用 uuid,其值为:e4b9440d-99f8-447d-b2d8-5161bee0bb1a 。
另外,我还封装了一个名为 AESKeyByUuid 的方法,这个方法的作用就是能够依据类似 UUID 格式的字符串,生成适用于 AES - 128 这种加密标准的密钥呢。
以下是该方法的Go代码:
// AESKeyByUuid 从类似UUID格式的字符串生成适用于AES-128的密钥
func AESKeyByUuid(uuidStr string) []byte {
// 去掉UUID字符串中的 - 分隔符
cleanUuidStr := strings.ReplaceAll(uuidStr, "-", "")
// 使用SHA256对清理后的UUID字符串进行哈希处理
hash := sha256.Sum256([]byte(cleanUuidStr))
// 截取前16字节作为适用于AES-128的密钥
return hash[:16]
// 这里你也可以用MD5处理也行,根据自己定义方法改变一下
// 返回32位字符串 即可
}
在加密前,我会用通用 uuid 来获取 AESKey,对新用户手机号进行加密。之所以封装成这种方法格式,是觉得后面可能还会用到。
七、身份证和银行卡敏感信息加密 为防止内部数据处理过程中出现意外泄露风险,对重要信息(如用户设置的银行卡、身份证信息)进行加密处理时,会调用当前用户的 uuid 标识来加密,这样能让密钥更具唯一性。
手机号包含了用户的重要身份关联信息,一旦泄露可能导致用户遭受骚扰电话、诈骗等诸多不良后果。欢迎大家分享更多方案。