欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

网站注册登陆,密码如何进行加密?

程序员文章站 2022-03-10 22:09:02
...
在网上看了好多这方面的文章,都说客户端的密码,登陆时要用md5加密后发给服务器,然后服务器再和数据库中的salt和加密后的密码进行比较

不太明白如果要是这样做的话

假设A用户的用户名为abcd,密码为123456. md5加密后是:e10adc3949ba59abbe56e057f20f883e
对于黑客而言,他偶然获取了用户名:abcd,密码:e10adc3949ba59abbe56e057f20f883e

此时他不用知道abcd的密码是123456,同时也不需要理解e10adc3949ba59abbe56e057f20f883e 是怎样生成的,他只需要输入用户名:abcd,然后密码:e10adc3949ba59abbe56e057f20f883e 来调用服务就可以登录了。

如何避免这种情况的出现呢?


回复讨论(解决方案)

黑客怎么会知道用户名abcd 和密文?

客户端不需要加密
只需要按正常的用户名和密码登入就可以了。

然后服务器端,对密码执行 md5(md5(密码)+salt) 操作,生成加密后的密码。salt从数据库中获取。
再与数据库中加密的密码比对。
相同则登入成功,否则登入失败。

这种做法的好处是,即使数据库被黑客进入了,也不能知道用户的明文密码。

服务端的密码是这么比较的

if ($row['pwd'] == md5($_POST['pwd'])){
//
}
就算别人知道MD5之后的密码,但是来到服务端,又需要再加密一次的,或者加密多次再比较。

黑客即使黑进你的数据库,获得了你的会员的用户名与加密过的密码,因为md5的加密基本上是不可逆的,所以黑客是无法调用你已知的服务实现登陆操作的。

但是一层md5加密也不是很安全,很多网站都提供md5的解密。建议多次md5加密或者添加你自定义的字符串然后在md5加密(md5(user_passwd.your_defined_string))。