密码学中salt的意义

我们知道当我们的用户登录的时候,如果任由用户的account和password不加修饰直接裸奔在互联网环境中,是不负责任的,会暴露用户的信息,损失用户的钱财等。

一般我们使用摘要MD5算法对用户的密码进行一次hash,把hash值保存在数据库中。当用户使用他的账号密码登录的时候,我们对用户的密码进行MD5计算出hash值,然后拿计算出的值和数据库中保存的hash值比对,相等则认为是正确的账号密码,允许登录。

通过上边的流程我们可以想象的到,MD5摘要算法对于相同的密码总是得出同样的hash值,不然也就没有比对相等的说法了。但这样就有一个问题,因为对于相同的密码总是得出同样的hash值,那就可以对常见的密码的hash值进行保存,做成一个大字典。如果用户的密码生成的hash值被泄漏了,一些别有用心的人就可以穷举这个大字典:如果某个密码生成的hash值和泄漏出去的值一致,也就获取到了该用户的密码,那也就不安全了。

况且MD5算法使用至今,已经保存了太多的hash值,安全性可想而知。

这时候我们可以使用salt来进一步保护用户的密码。

salt是一个随机字符串,我们可以使用MD5(pass+salt)来计算hash值,然后把hash值和salt按某种特殊的拼接方式存在数据库中。当用户登录的时候,我们把这串特殊拼接的字符串还原回hash和salt,同样使用MD5(pass+salt)计算hash值,和还原的hash值进行比对,比对一致则认为是正确的账号密码,允许登录。

这时候我们发现,就算我们保存的这串经过特殊拼接的字符串即使被泄漏出去也没关系。首先,别人不知道我们是怎么拼接的这串东西,哪里是hash,哪里是salt?其次,就算被他蒙对了,他也不知道我们的算法,我们是怎么使用salt的,是MD5(pass+salt)还是MD5(salt+pass)又或者是MD5(MD5(pass+salt)+MD5(salt+pass))?大大增加了破解用户密码的难度。

我们的salt发挥了作用,我们的用户也可以安心了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 本篇文章,将继续讲解密码学算法的另一个算法 👉 HASH算法。 一、加密策略 在讲解HASH之前,我们来分析...
    深圳_你要的昵称阅读 325评论 0 1
  • 但凡一个有点追求的iOS开发,总得会点加密技术,要不然用户信息就有可能被其他人获取用来做一些对我们不利的事情。 一...
    软件iOS开发阅读 645评论 1 6
  • 1.起源军事领域 运用最广对数据加密进行保护凯瑟大帝 --凯瑟密码本一直持续用到上世纪70年代 二战美日对战 ...
    笑面狼阅读 1,751评论 0 51
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,606评论 28 53
  • 首先介绍下自己的背景: 我11年左右入市到现在,也差不多有4年时间,看过一些关于股票投资的书籍,对于巴菲特等股神的...
    瞎投资阅读 5,788评论 3 8