密码学,盐保存在什么地方?
每次都表示一下我是一个新手。我在做网站安全方面是第一次,我使用MD5加密,随机生成salt再存入数据库。
现在我有一个问题,如果别人能得到密码hash,那也能得到salt,毕竟都存在数据库里。那这样加盐的意义在哪里?还是我理解错了?
**纠正一下,我存的是(hash,salt)和salt。上面写错了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
加salt的意义不是防止针对某个哈希值的暴力破解,是防止使用彩虹表批量破解哈希值。
具体到某一个哈希值,salt也使得攻击者必须使用字典+枚举的方式来破解,同样增加了破解的难度。
加盐是为了防止已有MD5查询网站或者程序直接破解密码。
比如你的密码是admin,MD5值是21232f297a57a5a743894a0e4a801fc3,但是如果你设置一个salt:!@#)(*$%&^,加密函数变为MD5(pass+salt),MD5值变为52cbc7b676eb498c96ac20e854f92f6f,那么那些破解网站或者程序就难以直接找出密码。
当然你的算法可以做得更加复杂,如MD5(MD5(salt+pass)+MD5(pass+salt)),即使有人通过注入等漏洞攻击,从数据库获得密码Hash,在不知道密码算法的情况下,他也难以进行密码的破解。
你理解的有误,跟 salt 一起存起来的不是密码的 hash 而是 hash(密码, salt)。如果只存密码的 hash,很容易被碰撞逆向出密码明文,但是一旦添加了随机的(哪怕是伪随机的)salt,碰撞法也不能逆向出密码明文了。
既然别人能得到你的hash和salt,那也就能得到你整个数据库~ 所以你应该考虑你的系统安全而非网站安全了。