我们是如何加密手机号和邮箱的
为何要加密手机和邮箱
手机号和邮箱都属于个人隐私信息,如果这些泄露很容易信息会给用户带来不必要的骚扰。(快递行业的事情管不了)
目前多数网站和应用对手机和邮箱都是明文存储的,读取和管理都很方便,但是不够安全(万一数据库泄漏..漏..了呢, 比如CSDN ,12306,学信网,还有各大高校的各种网站数据库等发生过什么,想必都知道)。
至少要保证数据库管理员直接拿着数据库也无法得到真实的信息。
在不影响大家使用的便捷的前提下把安全做到极致,一直是我们的追求。(资源和条件有限)
手机号和邮箱应该怎样加密
手机号邮箱邮箱不同于密码加密:
手机号和邮箱加密后要可还原,而密码就不用了;
再者手机号和邮箱的敏感性要稍微低于密码。
根据实际情况,绑定的手机和邮箱不应该出现重复现象,因此可以快速查重
把手机号进行可逆加密使得加密之后看起来仍然像一个手机号:
为什么要加密的还是像一个手机号或者邮箱
- 多数系统的数据库字段是这么设计的,
- 对于做黑产者(窃取倒卖数据库的人)而言,真手机号和假手机对他们的意义是一样的
例如
手机号
ABCDE@mail.yunyin.org
==> XYZ1223@mail.yunyin.org
邮箱
18222345678
==>18217151132
加密算法
- 核心采用
AES
加密算法 - 基本思想 格式保留加密
邮箱加密算法
如图
核心是部分AES加密->重新编码->拼接
可根据密文直接查重
解密过程倒过来进行即可
手机加密算法
经过多次修改如图
因为对于手机的保密性要求更高,所以对手机加密算法更复杂
为了保证每次手机号数字对数字的“无规律”一一映射,这里采用密码表的设计来实现一一对应。遍历4位数(1万个键值对),在时间和性能上均可接受。
其中使用了两个密钥和两个混淆参数,全部爆破几乎不可能。
尾号四位全局统一加密,可以通过相同尾号查找手机号或者去重;
中间六位单独混淆加密,每个的加密映射方法都不一样(每个人的密码表都是不同的)。
加密算法开源地址 https://github.com/nkumstc/print/blob/master/Common/Common/Encrypt.php,欢迎指出问题