博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网站数据库中“密码加密”方法思考
阅读量:7242 次
发布时间:2019-06-29

本文共 1063 字,大约阅读时间需要 3 分钟。

hot3.png

博主,开始时候,写的web应用,数据库中的密码,都是直接保存的。真正的原汁原味,真正的所见即所得。

后来,看了别人的web应用都是MD5加密的,感觉很不错,自己也在应用中加入了MD5加密,这样看起来就专业了许多,由于MD5的密文是无法逆向获取明文的,所以也觉得很安全。

看了(探微·智在未来)的一篇博文《安全密码机制(salt机制)》。这里简单说下,所读博文的内容和自己的一点认识吧。

    首先,解释下,为什么单纯MD5加密,是不安全的,我们暂且不论MD5是否可以由密文推出明文(有32位密文计算出加密前的密码),也不论用户的密码是否符合很高的安全性(加入大小写字母、数字、特殊字符等)。

        当黑客窃取一个大型网站的数据库信息后,通过MD5加密(而非解密)方法,不断加密一些密码,如123abc,在数据库中搜索,加密后的密文A906449D5769FA7361D7ECC6AA3F6D28,如果存在,则相应的用户密码就被破解了。不断的穷举密码,加密,匹配。这个速度是很快的,MD5加密很快,数据库匹配也很快,如果有预先生成的彩虹表,那就更快了。如果用户的密码不太复杂,就会很快被破解,这就是为什么很多网站要求密码中包含至少包含数字+大小写字母+特殊字符,增加穷举破解的难度和成本。然而,这种成本有时候算不上太大。

然后,说下,博文中介绍的salt机制。

    1、用户注册时

    用户注册密码A、客户端生成一个随机码B(盐),将两者组合到一起(或者增加其他稳定的元素,如邮箱地址等),然后MD5/SHA1/SHA2加密为C,将随机码B(盐)和加密后的C,两者均分别保存到数据库。

    2、用户登录时

    用户只需要提交密码,提交到服务器后,将密码和该用户数据库中保存的随机码B(盐)组合加密成密文C1,验证是否与数据库中的C一致即可。

        有了盐的存在,虽然是保存到数据库的,但是破解一个网站的会员密码信息的成本,会大大大大增加,破解过程可以脑补,最终可能花费很大力气也破解不了几个。

题外话1:加盐可以降低TK后,被破解会员密码的风险。但是,当用户登录时,提交的密码,无论是明文还是密文,一旦被恶意获取,就可以直接登录会员账号。解决被窃取的问题,是使用https,将Client端到Server端的数据传输进行加密,这样就无法被窃取了。

题外话2:为了防止别人暴力破解密码,可以增加验证码,增加登录错误的次数控制。当然,验证码也分很多种啦。

 

转载于:https://my.oschina.net/ijustdoit/blog/207429

你可能感兴趣的文章
转载:AAC编解码概述
查看>>
POJ 3370 Halloween treats( 鸽巢原理简单题 )
查看>>
STL vector list deque区别与实现(总结)
查看>>
讨论76 怎么查一下我机器的内存?AIX环境
查看>>
001设计模式 -- 策略模式
查看>>
Java中的基本数据类型
查看>>
wordpress 插件推荐
查看>>
对于[]()+!的研究
查看>>
jquery中对于为一组标签赋予点击事件
查看>>
文档模型(JSON)使用介绍
查看>>
实验2 柱状图生成
查看>>
利用GCTA工具计算复杂性状/特征(Complex Trait)的遗传相关性(genetic correlation)...
查看>>
Python递归报错:RuntimeError: maximum recursion depth exceeded in comparison
查看>>
[Codeforces178F2]Representative Sampling
查看>>
NPOI创建Word
查看>>
Entity Framework 使用注意:Where查询条件中用到的关联实体不需要Include
查看>>
mysql因为服务器异常关机倒是启动不了 找不到mysql.sock
查看>>
矩阵的坐标变换(转)
查看>>
清除浮动(带来的影响) clear与margin重叠
查看>>
C语言移位
查看>>