2019独角兽企业重金招聘Python工程师标准>>>

对那些有用户系统的网站来说,如果存储用户的密码是个问题。 大家都知道不能明文存储,这样一旦被脱了裤子,后果很严重, 简单的md5 sha加密也不可取......

通常在做网站的时候,如果有用户系统的话,那么就会涉及到保存用户信息的功能,

最基本的用户名、密码是一定要保存的,

那么如何保存密码,是我们每一个web开发者都应该思考的事情。

网上时不时的爆出一些网站被拖库的事情,其中不乏一些我们眼里的大网站,

令人大跌眼镜的是,有不少网站还在明文保存密码。

所谓明文,就是把用户密码原封不动的保存起来, 这种做法显而易见是不安全的,一旦你的数据库被拖库(拖库是指数据库内容被下载),那就将是灾难,

再加上用户的习惯性和惰性,很多用户在多个网站上都会使用同样的密码,这也会威胁到用户在其他网站上的安全。

还记得csdn600万,天涯4000万吗

明文保存的user表

id username password createtime
10001   test1@hutuseng.com    iloveu 1393151535
10002 test2@hutuseng.com hutuseng123   1393134647  

所以我们不能明文保存,需要将用户密码加密,通过算法将明文密码进行编码,用我们的函数y=f(x)表示的话,

x表示原始密码,y表示加密后的密码,f 就是我们需要的加密函数,

加密函数的设计就看自己的了,比如一个简单的加密算法就是将原始密码倒排,

举例来说,你的原始密码为 abc123 ,那么加密之后的密码就是 321cba,

这样黑客得到你的密码的话,如果直接使用 321cba登录是无法登录的。

简单加密保存的user表

id username password createtime
10001   test1@hutuseng.com    uevoli 1393151535
10002 test2@hutuseng.com 321gnesutuh   1393134647  

但是,这样的问题就是,如果黑客知道了你的加密算法f,他很容易就能够通过f和y来反推出x。

所以,我们需要找到一种不可逆的加密算法,也就是说即使黑客知道了y和f,也是无法反推出x的。

于是md5  sha1 sha256等哈希算法就出现了,通过这些哈希算法加密后的密码,很难反推了,这些算法的逻辑太过复杂,可以找专门的资料看看。

md5加密保存的user表

id username password createtime
10001   test1@hutuseng.com    edbd0effac3fcc98e725920a512881e0 1393151535
10002 test2@hutuseng.com 46b54a029136318e9846e1c35f19db06    1393134647  

那么我们是不是就可以把密码直接用这类算法加密存储了呢?

当然,最好不要。理由就是,虽然这些算法不可逆,但是他们很容易被暴力破解(暴破)。

暴力破解的原理就是,y=md5(x), 既然无法反推,那么就挨个试,

通常黑客们会采用一些密码字典,挨个把密码用md5算法算一遍,看看结果跟y是否一致。

由于现在的电脑性能都很强,而且MD5算法本身也很快,所以如果你的密码设计不是特别复杂的话,是很容易破解的。

现在,暴力破解这一步都省了,很多人把很多常用的密码的md5啊 sha加密后的密码都对应起来了,做成了网站,

你只管上网去查就行了,一般简单的密码都可以瞬间破解。

比如 www.cmd5.com 之类的网站,你可以上去试试,edbd0effac3fcc98e725920a512881e0 解密以后是不是就是 iloveu 呢。

所以,为了防止简单的密码被破解,很多网站会要求用户的注册密码设置的尽量复杂一些,比如最少8位,要包括大小写字母、数字、特殊符号等,这样就会大大的增加暴力破解的成本。

那么按照这个思路,

如果我们不限制用户的密码复杂度,可以允许用户使用诸如123456之类的简单密码的话,

那么我们就需要把用户的密码加工一下,变成一个复杂的密码,

一个很简单的思路就是,你可以给用户密码增加一个额外的字符串a,比如 88zz%%,

这样的话,加密算法就变成了, y=md5(x+a), 如果用户密码为123456的话,

那么加密后的密码则是 12345688zz%% 这个密码的md5值,能有效的防止这种通过暴力破解和一些网站碰撞破解。

这里的这个额外的字符串a,在英文的叫法里一般叫 salt,也就是盐的意思,给密码加点盐,让它更安全。

md5加salt加密保存的user表

id username password createtime
10001   test1@hutuseng.com    d80dfeadf1181325a22cafba4d5b4782 1393151535
10002 test2@hutuseng.com 010b5eb7da3452f0a2281f185c30e8a2  1393134647  

当然,进一步讲, 我们也可以让每个用户的salt也都不一样,来进一步的增强安全性。

比如每个用户的salt都是他的 createtime 。

还可以通过多轮md5加密的方式, y=md5(md5(md5(md5(x))))

转载于:https://my.oschina.net/u/2357525/blog/702757

网站该如何存储用户的密码相关推荐

  1. 如何安全的存储用户的密码

    大多数的web开发者都会遇到设计用户账号系统的需求.账号系统最重要的一个方面就是如何保护用户的密码.一些大公司的用户数据库泄露事件也时有发生,所以我们必须采取一些措施来保护用户的密码,即使网站被攻破的 ...

  2. python获取数据库用户名密码_在数据库中存储用户和密码

    我正在创建一个用户+密码的软件.认证后,用户可以访问一些半公共服务,但也可以加密一些只有用户才能访问的文件.在 用户必须按原样存储,如有可能,无需修改.在auth之后,只要软件还在运行,用户和密码都会 ...

  3. 探究Ubuntu如何存储用户登录密码

    Ubuntu系统中/etc目录下有三个和用户登录访问控制相关的文件:passwd.shadow.group.以前比较老的Unix系统将经过哈希处理的密码直接放在passwd文件中,现在的*nix则把经 ...

  4. 程序员必备基础:如何安全传输存储用户密码?

    前言 我们开发网站或者APP的时候,首先要解决的问题,就是「如何安全传输和存储用户的密码」.一些大公司的用户数据库泄露事件也时有发生,带来非常大的负面影响.因此,如何安全传输存储用户密码,是每位程序员 ...

  5. 如何安全的存储用户密码

    文章目录 1.明文存储(极不推荐) 2.使用MD5或其它算法哈希后存储(较不推荐) 3.加盐后哈希存储(较推荐) 4.使用BCrypt算法加密后存储(非常推荐) 5.Spring Boot中使用jbc ...

  6. 我们应该如何保护用户的密码

    最近几年的新闻中一直有互联网头部公司系统被攻击导致用户密码泄露的新闻.那密码被破解肯定和当初项目伊始时选择的密码哈希方案造成的历史包袱有关.我们不讨论这些互联网巨头应该采用什么方案防止用户密码被破解, ...

  7. 获取令牌密码_如何真正存储用户密码和api令牌(即密码)

    获取令牌密码 A cliché in posts detailing password storage schemes is to finish by telling the syadmins and ...

  8. 计算机user用户的密码存储在,windows存放用户密码的文件

    密码丢失的解决的办法 提起Windows 2000密码丢失,确实是件令人头痛的事了,不管是自己不小心忘了密码也好,被别人恶意修改也好,一般都是重装系统,不但浪费时间,而且可能自己辛辛苦苦存储的资料也随 ...

  9. 网站用户修改密码源码(邮箱版)

    简介: 全网维护中 禁止添加新用户 部分商提供了 老用户修改密码接口 今天爱发布了改密接口 作者逍遥把他写成了网页版的 通过用户邮箱验证 修改密码 非本站用户无法使用 老规矩 接口本地化 需要的自行下 ...

最新文章

  1. 独家 | 2021年打破了零日黑客攻击的记录
  2. 多个旅游网站被挂马 五一假期外出旅游应小心
  3. 为什么request的页面与原页面不同_如何在不同页面上使用不同的Joomla CSS
  4. [QA] MySQL Error 1050(42S01): Table already exist
  5. Execute Process Task
  6. 第一次冲刺-个人工作总结01
  7. java file pathname_int compareTo(File pathname)
  8. lenovo 一键恢复6.0 NOVO下密码遗忘的解决方案
  9. 将Java应用程序作为Windows服务安装
  10. 安卓颜色标签android
  11. JavaScript基础知识指南-思维导图
  12. 怎样开图纸便宜_在县城开一家儿童乐园怎么样?开多大面积合适?投资需要多少钱?...
  13. 基于云开发的成语答题小程序
  14. 如何修改计算机的ip地址在哪里设置路由器,win7系统电脑无线路由器IP地址如何修改?电脑修改路由器IP地址的方法...
  15. 状态机实现的三种方法-C语言
  16. 昆仑万维:如涵在纳斯达克挂牌 公司持有其3.91%股权
  17. 基于创建的mogodb数据库,用python分析股票的跳空缺口
  18. k均值聚类(k-means)
  19. win电脑端QQ,微信聊天记录问题
  20. 微信小程序--Ble蓝牙

热门文章

  1. Rxjava2关于Disposable你应该知道的事
  2. java时间空值_Java SpringBoot Mybatis 日期类型属性空值保存出现异常
  3. picrust2功能预测-从qiime2安装到数据分析
  4. 华为鸿蒙第一批,正式确认了!华为鸿蒙系统第一批升级名单出炉,果粉:华为不厚道...
  5. OpenCV/CUDA—Sobel边缘检测
  6. 如何在VS中显示代码行号
  7. springboot 有限状态机入门指南
  8. c语言执行一条指令几个机器周期,时钟周期、机器周期与指令周期
  9. 华为matebook13重装系统后指纹解锁功能失效的解决办法
  10. 让人无法抗拒的小程序魅力值