51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

数据库中如何安全储存用户的重要信息/密码?

![KYP8_H28(OTGJ{4HO3@99G.png](http://static.51tbox.com/static/2024-11-15/col/755d5257c1c9d523e99e69edc3b21149/becf7d85007141429be131e355c657e5.png.jpg "KYP8_H28(OTGJ{4HO3@99G.png")

数据库中如何安全储存用户的重要信息/密码?

怎么样才能安全,有效地储存这些私密信息呢,即使数据库泄露了,别人也无法通过查看数据库中的数据,直接获取用户设定的密码。这样可以大大提高保密程度。

想要安全地储存用户的信息,密码,加密是肯定少不了的。

本文用php对其做简单的演示!

首先,先尝试以下最简单的不加密储存形式。
[D0BG4(Y)($299@UEQ@QN4P.png
运行后显示结果:
我们可以看到,不加密,储存进数据库后,密码一眼就可以看穿,万一数据库被入侵,用户的账户财产,隐私等都会受到威胁!
![~Y77CAI(3UEFZ~B{CEWIND.png](http://static.51tbox.com/static/2024-11-15/col/755d5257c1c9d523e99e69edc3b21149/acde309a5fed4bdcb906f7bfb5d1e572.png.jpg "~Y77CAI(3UEFZ~B{CEWIND.png")

接下来试试简单的加密处理

原理是,将用户设置的隐私信息,使用base64进行简单的单次加密,代码如下图所示!
![0$B(3@5E_(@WHA%B7%}1.png](http://static.51tbox.com/static/2024-11-15/col/755d5257c1c9d523e99e69edc3b21149/b0e9644fbf064cc2b870f0a3908e0c13.png.jpg "0$B(3@5E_(@WHA%B7%}1.png")
下面是运行结果:
[BNZIV7IKCJRHQLMLCW9M7.png
可以看到,通过简单的base64加密后的密码,已经变得不可读。目前达到了防小白的境界,一般普通人看到,概率是无法成功破解的。
但是只要遇上稍微会一点技术的人,试几次就能解开。
我们都知道,base64是一种简单的,可逆的加密形式。因此这样加密储存方式,并没有过多的作用!

接下来试试进阶加密方式

为了使加密不可逆,我们就需要用不可逆的加密方式,我们知道,MD5加密方式是不可逆的。

{collapse-item label="什么是md5加密?(点击展开)"}
MD5(全称是message-digestalgorithm5)的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"为一种保密的格式。它的典型应用是对一段信息(message)产生信息摘要(message-digest),以防止被篡改。通俗地说MD5码就是个验证码,就像我们的个人身份证一样,每个人的都是不一样的。MD5码是每个文件的唯一校验码(MD5不区分大小写,但由于MD5码有128位之多,所以任意信息之间具有相同MD5码的可能性非常之低,通常被认为是不可能的),凭借此特性常被用于密码的加密存储、数字签名及文件完整性验证等功能。通过MD5验证即可检查文件的正确性,例如可以校验出下载文件中是否被捆绑有其它第三方软件或木马、后门(若是校验结果不正确就说明原文件已被人擅自串改)。
{/collapse-item}

下面是用md5加密的代码示例
5~WOIR$WV8SYUTUK9.png
我们可以看到,用md5加密后的密码已经是乱序,并且由于md5加密的不可逆性,无法对其进行解密。
$85P03<code>Y2$[2U8~$</code>HX$K[0.png
但是,单纯地只对用户设置的密码进行md5加密,是不足以保密用户隐私的。
如果用户使用弱口令密码,那么其密码加密后的md5值,也是不安全的。
例如:
{0S_6L@30E63U$HB1PV1AFS.png
这是一个网上找的,声称有着90万亿条md5加密数据的库。
我们试着用刚刚用md5加密后的密文,看看它能不能破解:
723d505516e0c197e42a6be3c0af910e
R5)ET8VPA4W4D89BYXY(BM.png
果然,这种弱口令密码一下子就被找出来了。


加密算法再次升级

为了使用户可能输入的密码为弱口令,我们可以在用户的设置的密码前面加上一串比较复杂的密钥,这样可以增加密码md5加密前的复杂性。
![FXEW5CEONV@FQ_O2P$}6{W.png](http://static.51tbox.com/static/2024-11-15/col/755d5257c1c9d523e99e69edc3b21149/48b1a0a1dc3741879e6c62d1b58e4fe8.png.jpg "FXEW5CEONV@FQ_O2P$}6{W.png")
代码运行结果:
@KIDH[4AW@}LFQ~A8ZOO3M0.png
然后我们再将这个加密后的形式,看看还能不能被破解

![}A~84~S(${)$G}F$)3@BOJ.png](http://static.51tbox.com/static/2024-11-15/col/755d5257c1c9d523e99e69edc3b21149/5d9288f283ac46f6b90a113caed87e97.png.jpg "}A~84~S(${)$G}F$)3@BOJ.png")
不出所料,库中没有这个数据。

验证密码环节

在验证用户密码的时候,我们只需要再次将该加密过程执行一遍,然后将得出的md5加密后的结果与我们数据库中的MD5结果对比,即可验证用户是否输入正确的密码。


总结

通过我们上面所述,即可实现将用户输入的密码,用一个比较安全的形式储存在数据库里面,进而防止当数据库泄露或者被入侵的时候,用户数据遭到入侵,遭受损失!

赞(0)
未经允许不得转载:工具盒子 » 数据库中如何安全储存用户的重要信息/密码?