MD5加盐引起的讨论

场景:

某个App使用手机号注册并设置密码,成功后该用户即开户成功。我们登录密码传输到后台基本上都使用md5处理。但是仅仅简单的md5对于那些简单的密码(比如123456)还是容易破解,所以我们一般还会加盐处理。

第一种情况:前端,app端都使用一个固定的盐(定义一个很复杂的字符串,还可以将该字符串先md5后的值当作盐),这种处理确实已经非常安全了,但是会不会就完美了呢?NO,使用固定的盐那么不同的用户如果设置的密码相同(比如明文:123456),那么在数据库中存储的密文就会是一样的,那么公司内部管理数据库的人,假如他也使用的密码是123456,那么他就可以使用他的密文去数据库去查找有没有其他用户的密文跟他的相同,如果有就说明该用户跟他一样设置的都是123456。

第二种情况:上面第一种情况分析可知md5的盐首先要尽可能的复杂一点,二每个用户使用的盐最好是唯一的,不相同的。那么简单点很多app都是用的手机号码当作登录账号,手机号码绝对是唯一的可以很好的满足前面的需求,那就用手机号码(即登录账号)先md5得到的值当作盐。是不是又完美了呢? NO, 使用这种方式可能会遇到下面的问题:

            问题:app上一定有更换手机号的功能,一般更换手机号操作都是输入旧手机号,发短信,输入新号码,再输入登录密码(用旧手机号当盐值加密处理),然后提交到后台校验这4要素。这里就有问题了,这4个参数检验成功了,账号就换了,以后就再也不可能登录成功了。

           分析:假设原来的手机号132****    设置的登录密码 123456,更换的新号码为187****

首先  :                md5( md5(132***) + "123456" )  = abcd****(真实的肯定不是这个值,暂当作这个值)

换手机号后:      md5( md5(187***) + "123456" )  = qwer****(反正和之前的一定不相同的)

发现问题了吧,你还能登录才怪呢!!!

那如何解决这个问题?

我们在更换手机号那里再穿一个参数,因为现在页面本来就已经输入了新手机号,那么我们可以将用新手机号作盐的到的登录密码md5值也传进去,那么后台开始在比对以前的登录密码md5值一致后,就将数据库中存的登录密码替换成这个新的就ok了!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,235评论 25 709
  • 说起简历模板,大部分人的脑海里应该是这样的: 或者是这样的: 反正当年我毕业后第一次写简历找工作时,看到网上的这些...
    艾梨西娅阅读 3,051评论 0 5
  • 1、有的人适合读书,有的人适合社交,爱好各异。 2、习惯养成性格,性格决定命运。 3、有时候,信心比黄金重要...
    马唐阅读 1,499评论 0 0
  • 关于阅读,为什么经典越来越少,我以为有重要的两点: 一是前人把今人所想的问题,已经想过了,有了标准答案...
    烽火煤阅读 1,414评论 0 0
  • 田间阡陌上的花已经开了,你可以慢慢赏花,不必急着回来。 那是吴越王钱鏐写给他的夫人的书信,站在西湖的杨...
    皖琬阅读 2,629评论 0 0

友情链接更多精彩内容