声明:转载请勿删除作者名称。本文所介绍的算法可以遵循LGPL协议。
人类在大量的生产和生活过程中,会遇到一些敏感信息诸如汉人姓名、身份证号码、体重身高等隐私数据需要向第三方数据公司开放或者在测试环境中使用而导致的脱敏需求。根据不同的应用场景,可能会使用不同的策略来保证混淆或者脱敏数据可以正常工作。本文描述的是一种基于随机乱序字源生成汉字姓名的混淆/脱敏算法。
1. 选取中文汉字中可以作为姓氏的汉字。
2. 选取中文汉字中可以作为名字的汉字,简单起见,过滤情况1中的汉字。
3. 情况1和情况2中的汉字记录到列表中,并进行乱序排列。准备一个[字典数据]结构存放新旧姓名的对照关系{key=旧姓名, value=新姓名}。
4. 对于一个目标汉人姓名,可简单分解成[姓氏]+[名字]{1,2}的情况。如果旧姓名在[字典数据]中存在,则返回旧姓名对应的新姓名。如果不存在,则转到步骤5。
5. 将[姓氏]的值按照情况1中列表长度取余,得到的序号再向情况1的列表查询作为[新的姓氏]。
6. 将每个[名字]中的汉字按照情况2中列表长度取余,得到的序号向情况2列表查询作为[新的名字]。
7. 将[新的姓氏][新的名字]{1,2}作为[新的姓名],向[字典数据]中查询是否作为值存放。如果可以,则维护新旧姓名对照关系。如果不可以,则对每个旧姓名的字节增加1,重复步骤5直到可以存放。
8. 数据处理完,将[字典数据]保存。由于[字典数据]中键值是一一对应而且值不会重复,在恢复混淆数据时候可以转置即把值作为键,键作为值的新字典。
更新:刚刚机器跑了一下,貌似在Debug模式下面1000000(一百万)次跑的结果是2954.5117毫秒,2.955012纳秒/平均每笔。
1.88GHz的Intel Core i3-4030U,4个逻辑内核;12G内存(实际程序占用内存是30M)的机器
由于简书不支持格式化代码以及代码高亮显示,而且这里空间太小写不下,需要代码参考的请勿联系作者的微信。
网友评论