这两年国家愈来愈重要我的敏感信息的存储、传输与交换。在获取敏感我的信息时,例如,手机号、身份证,都须要主体的主动受权。算法
对数据敏感信息加密后,再进行存储。有这样一个场景:有个用户表除了其余字段外,还有手机号 mobile_no 和身份证 identity_card ,这两个敏感信息存储字段。若是直接储存mobile_no和identity_card明文,就很容易泄漏。数据库
能够对这两个字段进行对称加密或者非对称加密存储,分别定义两个加密字段 mobile_no_encrypted 和 identity_card_encrypted。可是进行加密存储到数据库必然致使如下两个问题:安全
如何进行精准查询匹配网络
为了解决这个问题,还得多加一个字段,对于手机号添加 mobile_no_sha 字段,身份证添加 identity_card_sha 字段。这两个字段分别存储手机号和身份证的SHA-1的散列码(也可使用md5算法)。这样的话,若是精准查询就直接比对SHA-1散列码就行。ide
select * from t_user where mobile_no_sha = sha-1(mobile_no)
如何进行模糊查询匹配?函数
对应模糊查询就有点麻烦了!!!大数据
一般数据库自带有加解密函数,如MySQL的PASSWORD ,MD5,AES_ENCRYPT等等。对于密码等信息能够采用单向加密,验证的时候用一样的方式加密匹配便可。而对于须要比对原内容的模糊查询,则须要使用双向加密,也便可以解密,在MySQL可使用自带的AES加密。完成存储加密,读取解密后,就能够实现模糊搜索了:加密
select * from t_user where AES_DECRYPT(UNHEX(mobile_no_sha ),'key') like 'xxx%';
使用函数还原原始内容而后使用like关键字匹配便可实现模糊搜索。spa
MySQL使用AES_ENCRYPT()/AES_DECRYPT()加解密的正确姿式.net
http://blog.itpub.net/29773961/viewspace-2142305/
对于明文传输,首先的摒弃http传输协议,采用https传输协议。若是还想增强安全级别的话,就本身在定义一种加密方式,对敏感信息进行额外加密。好比采用对称加密AES或者非对称加密RSA进行自定义加密。
这种状况比较比较麻烦,分为集团内部子公司数据交换与第三方公司之间数据交换
集团公司之间是利益共同体,好比存在这样的场景,A集团公司有一个保险公司和一个To C的商城系统,那是否是存在这样的可能呢?保险公司须要收集大量我的的信息,而后大数据分析这些我的的状况看看哪一个人的钱比较多,而后给他合理的推送保险,恰好商城作得好不错,挺多人注册,经过商城就能拿到不少我的的手机号之类的。
对于第三方公司系统之间,进行数据交换。也有可能存在接口调用时,传输敏感的信息。记得前两年,顺丰物流和菜鸟物流发生过这样的事,就是菜鸟物流要求顺丰物流必须上传全部物流信息,后来顺丰直接断了这两个系统的交互。
对于这两种状况,我认为都须要在明显的地方,给出相关的用户协议,当主体赞成受权时,才能进行数据交换。可是这两种状况,几乎尚未任何公司按照这种渠道来作的,都是偷偷的就把数据进行了交换。