前言:其实在应用各种产品的时候,也有发现过有些手机号码和邮箱地址等,都会有一部分是密文显示。 嗯,其实最明显的就是银行卡了,基本上就没有全部明文显示的。 这两天在做一个需求的时候,刚好也有这样的要求。 之前没有想过为什么,这次简单想了想,记录一下。
一、需求整理
其实就是当为手机号:则显示前3位和后3位,其余的以*补齐; 而当是邮箱地址时,显示第一个字符以及@和之后的字符,其余的以*补齐。 示例:151*****507;h***********@163.com;
我的处理过程:那天很匆忙,直接先以结果为导向,so,有待改善的代码如下:
手机号混淆:
protected String getSafeMobileString(String mobile) { String result = ""; int mobileLength = 11; if (!Strings.isNullOrEmpty(mobile) && mobile.length() == mobileLength) { result = mobile.replaceAll("(\\d{3})\\d{5}(\\d{3})", "$1*****$2"); } return result; }
邮箱地址混淆:
protected String getEmailString(String email){ String result=""; if (!Strings.isNullOrEmpty(email)) { String[] str=email.split("@"); String strPrefix=str[0].substring(0,1); int len=str[0].length()-1; String innerText=""; for (int i=0;i<len;i++){ innerText+="*"; } result=strPrefix+innerText+"@"+str[1]; } return result; }
事实上,我一开始这样写完后,在页面上的显示,完全达到了需求所说的密文显示。 刚开始,我也就是这么过去了!
二、为什么要密文显示
后来在做另一个需求的时候,在查看HTML内容的时候,发现了一个大bug,因为显示虽然是密文显示,但由于需要默认验证手机验证码或者邮箱验证码,所以在页面的某一个地方,用hidden类型,明文显示了一个手机号、邮箱地址。 那时候我就很懵逼了,我靠靠,这是什么鬼,藏毛线啊,费半天劲,就跟走个过场骗鬼一样。
然后,我就在想,要求密文显示的用意,到底是什么?作为用户本人来说,明文、密文其实区别不大,那么为什么要密文呢?我想到的是: 防止这种关键信息,被非本人的用户获取到! 基于这一点:1,对于普通的用户来说,我之前做的那一步就够了,密文掩盖,根本看不出完整的数据;2,但对于稍微懂点的人,还有那些爬手来说,这就是一场掩耳盗铃的闹剧。 基于此:我做了以下更改:
以密文显示数据,并且去除页面的手机号、邮箱地址信息,在操作时,直接以后台缓存的用户数据做处理。 PS:目前也就做到这样了,呃,呵呵哒!
但是,查了以下网上对于混淆这种关键信息的方法有很多:A:做成图片显示;B:将可能会用到的正则匹配关键字做更改,比如说:将@ 配置为一个汉字或者其他;C......
三、个人总结
总结这篇博客,主要不是想说应该怎么去混淆这个数据以及它究竟有多少种方式去做到。 我个人来说,主要是想记录一下自己的成长和思考,为什么呢? 之前有一个人跟我说过:不要以为那些找锤子的人,真的是想钉一颗钉子,也许他只是想找个地方放下他的物品而已!
结合到这个简单的例子,我觉得虽然我后来把页面上隐藏的手机号和邮箱地址干掉了是件很小的事儿,但是:我思考了。