前段时间爆出 Facebook 明文存储用户密码,多达 6 亿用户,而它的用户总数是 27 亿,占比 22 % 。
看到这个消息,是不是很震惊?
无独有偶,之前有听过很多银行系统的密码也是明文(真假没有验证)。
在读书时,忘记学校网站密码后,直接打电话给 IT 人员,IT 人员让我说出可能的密码,然后他会告诉我是否正确。那时候我怀疑密码是明文存储的,虽然也没能验证。为什么怀疑是明文,怎么可能要求每个 IT 人员都知道怎么对密码进行一定的变换,然后和存储的密码进行比较呢?(如果有相应的工具那么另说)
明文存储密码存在泄露的风险,也存在撞库的风险。什么是撞库?撞库就是你在好几家网站上共用一个密码,一家的数据库泄露,你在其他网站的密码信息也就被泄露了。关于这种情况,你会说,每个网站密码用不一样的不就好了?可是,有那么多网站,那么多密码你记得过来吗?
我们知道明文存储密码是不安全的,加密存储密码是安全的。
但是,加密存储密码也不一定安全,随着技术的进步,之前的加密算法的安全性大大降低,很容易被破解,于是新的加密算法不断被提出。在这个过程中,有如下几种密码的存储方式。
方法 1:一次 HASH 操作
很早的方法是对密码进行 HASH 操作(如 MD5, SHA - 1,SHA - 256 算法)。HASH(哈希)也即散列:把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要。