数据散列算法
写在前面
今天,领导安排了个任务:需要将美国的账号和东南亚的账号合并到一张表里,这样就可以把美国和东南亚的两个客户端合并成一个。背景是这样的,因为各个国家对于敏感数据出境的监管非常严格,如果直接通过数据同步的方式,政府不会同意。所以,目前的方案是将账号数据进行散列处理之后,把这些散列值作为账号存储。用户进行认证时,也同样进行散列后,进行比对。这样就可以合规。
问题
处理这个问题最好的就是选择散列算法。但算法需要具备:
单向性 只能通过账号单向散列成对应值,而值无法反解析出账号。这样,就保证了数据不出境,不会收到政府的“喝茶”邀请啦
安全性 散列的算法不容易破解
速度快 因为在业务处理中还有其他的功能,这个算法就不能太慢
碰撞概率低 用户不同的账号散列后的值也不一样
算法研究
基于以上考虑,对目前流行的几种散列算法(MD5、SHA-1、SHA-256)进行了比较。
MD5(信息摘要算法),一种被广泛使用的密码散列函数,可以产生出一个 128 位(16 字节)的散列值(hash value),用于确保信息传输完整一致。
SHA-1(安全散列算法 1),可以生成一个被称为消息摘要的 160 位(20 字节)散列值。
SHA-256,是 SHA-2(安全散列算法 2)的一种,因为生成 256 位散列值而得名。
这几种算法都是单向散列算法,具有不可逆性。都可以实现对任意长度的字符串进行散列,生成固定长度的字符串。虽然都无法百分百确保防碰撞,但安全性方面由于散列值越长,碰撞发生的概率越低。所以在防碰撞等级上,SHA-256 > SHA-1 > MD5 。但是速度上,SHA-256 就要相对于其他算法逊色不少。在当前场景,通过数据加盐的方式,这几种算法完全可以实现一定的安全性。
总结
存在即合理。这几种算法在各方面比较虽各有不同,但具体使用的时候,还要看应用场景。只有适合的才是最好的!
版权声明: 本文为 InfoQ 作者【技术小生】的原创文章。
原文链接:【http://xie.infoq.cn/article/813dee3d07be9d780b2b3bda0】。文章转载请联系作者。
评论