Home  >  Article  >  Backend Development  >  网站注册登陆,密码怎么进行加密

网站注册登陆,密码怎么进行加密

WBOY
WBOYOriginal
2016-06-13 12:01:221697browse

网站注册登陆,密码如何进行加密?
在网上看了好多这方面的文章,都说客户端的密码,登陆时要用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))。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn