数据库中如何安全储存用户的重要信息/密码?
怎么样才能安全,有效地储存这些私密信息呢,即使数据库泄露了,别人也无法通过查看数据库中的数据,直接获取用户设定的密码。这样可以大大提高保密程度。
想要安全地储存用户的信息,密码,加密是肯定少不了的。
本文用php对其做简单的演示!
首先,先尝试以下最简单的不加密储存形式。
运行后显示结果:
我们可以看到,不加密,储存进数据库后,密码一眼就可以看穿,万一数据库被入侵,用户的账户财产,隐私等都会受到威胁!
接下来试试简单的加密处理
原理是,将用户设置的隐私信息,使用base64进行简单的单次加密,代码如下图所示!
下面是运行结果:
可以看到,通过简单的base64加密后的密码,已经变得不可读。目前达到了防小白的境界,一般普通人看到,概率是无法成功破解的。
但是只要遇上稍微会一点技术的人,试几次就能解开。
我们都知道,base64是一种简单的,可逆的加密形式。因此这样加密储存方式,并没有过多的作用!
接下来试试进阶加密方式
为了使加密不可逆,我们就需要用不可逆的加密方式,我们知道,MD5加密方式是不可逆的。
下面是用md5加密的代码示例
我们可以看到,用md5加密后的密码已经是乱序,并且由于md5加密的不可逆性,无法对其进行解密。
但是,单纯地只对用户设置的密码进行md5加密,是不足以保密用户隐私的。
如果用户使用弱口令密码,那么其密码加密后的md5值,也是不安全的。
例如:
这是一个网上找的,声称有着90万亿条md5加密数据的库。
我们试着用刚刚用md5加密后的密文,看看它能不能破解:
723d505516e0c197e42a6be3c0af910e
果然,这种弱口令密码一下子就被找出来了。
加密算法再次升级
为了使用户可能输入的密码为弱口令,我们可以在用户的设置的密码前面加上一串比较复杂的密钥,这样可以增加密码md5加密前的复杂性。
代码运行结果:
然后我们再将这个加密后的形式,看看还能不能被破解
不出所料,库中没有这个数据。
验证密码环节
在验证用户密码的时候,我们只需要再次将该加密过程执行一遍,然后将得出的md5加密后的结果与我们数据库中的MD5结果对比,即可验证用户是否输入正确的密码。
总结
通过我们上面所述,即可实现将用户输入的密码,用一个比较安全的形式储存在数据库里面,进而防止当数据库泄露或者被入侵的时候,用户数据遭到入侵,遭受损失!
评论 (1)