我的眼睛,就是为了寻找你而存在的。 收藏本站
登陆 / 注册 搜索

阅读: 18.9K   回复: 5

[# 加密解密] 密码加密时的加盐(salt)是什么

小执念 古黑浩劫论坛大牛 2016-4-20 19:45 |显示全部楼层

可遇不可求的事:故乡的云,上古的玉,随手的诗,十九岁的你。

管理员
        我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码。

        其实,对密码进行散列存储不是一个新鲜话题了,解决起来也不是很难,但很多人还是不大了解。这个帖子只是强调一下“加Salt散列”这个简单的技术。
         
        所谓加Salt方法,就是加点“佐料”。其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确。

         
        这里的“佐料”被称作“Salt值”,这个值是由系统随机生成的,并且只有系统知道。这样,即便两个用户使用了同一个密码,由于系统为它们生成的salt值不同,他们的散列值也是不同的。即便黑客可以通过自己的密码和自己生成的散列值来找具有特定密码的用户,但这个几率太小了(密码和salt值都得和黑客使用的一样才行)。


        下面详细介绍一下加Salt散列的过程。介绍之前先强调一点,前面说过,验证密码时要使用和最初散列密码时使用“相同的”佐料。所以Salt值是要存放在数据库里的。

        如下图所示,注册时

密码加密时的加盐(salt)是什么 salt.jpg

        1)用户提供密码(以及其他用户信息);
        2)系统为用户生成Salt值;
        3)系统将Salt值和用户密码连接到一起;
        4)对连接后的值进行散列,得到Hash值;
        5)将Hash值和Salt值分别放到数据库中。

        如下图所示,登录时

密码加密时的加盐(salt)是什么 salt2.jpg

        1)用户提供用户名和密码;
        2)系统通过用户名找到与之对应的Hash值和Salt值;
        3)系统将Salt值和用户提供的密码连接到一起;
        4)对连接后的值进行散列,得到Hash'(注意有个“撇”);
        5)比较Hash和Hash'是否相等,相等则表示密码正确,否则表示密码错误。

       现在你知道了吗?


soarcloud 「龙战于野」 2016-4-21 15:03 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

盐的空间若小的话,加之只是增加存储空间而已。安全的盐至少也要8个字节才行。
soarcloud 「龙战于野」 2016-4-22 08:42 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

问题有些加盐也只加了4个字节,你懂的。而且是4个字节的Base64编码最多64种情况
清风霁月 「出类拔萃」 2017-12-12 14:09 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

  在逐字逐句地看完这个帖子以后,我的心久久不能平静,震撼啊!为什么会有如此好的帖子?!我纵横网络bbs多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子。
耀眼的阳光 「出类拔萃」 2018-5-3 11:07 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

我真想亲口管你爷爷叫声:爹!
巴黎环抱的花海 「龙战于野」 2018-5-6 11:26 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

占位编辑
您需要登录后才可以回帖 登录 | 注册账号  

本版积分规则

关于本站|大事记|小黑屋|古黑论 网站统计

GMT+8, 2020-9-24 21:55 , Processed in 0.033092 second(s), 19 queries , Redis On.

© 2015-2020 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表