首页 > 密码学,盐保存在什么地方?

密码学,盐保存在什么地方?

每次都表示一下我是一个新手。我在做网站安全方面是第一次,我使用MD5加密,随机生成salt再存入数据库。

现在我有一个问题,如果别人能得到密码hash,那也能得到salt,毕竟都存在数据库里。那这样加盐的意义在哪里?还是我理解错了?

**纠正一下,我存的是(hash,salt)和salt。上面写错了


如果别人能得到密码hash,那也能得到salt,毕竟都存在数据库里。那这样加盐的意义在哪里?还是我理解错了?

既然别人能得到你的hash和salt,那也就能得到你整个数据库~ 所以你应该考虑你的系统安全而非网站安全了。


你理解的有误,跟 salt 一起存起来的不是密码的 hash 而是 hash(密码, salt)。如果只存密码的 hash,很容易被碰撞逆向出密码明文,但是一旦添加了随机的(哪怕是伪随机的)salt,碰撞法也不能逆向出密码明文了。


加salt的意义不是防止针对某个哈希值的暴力破解,是防止使用彩虹表批量破解哈希值。

具体到某一个哈希值,salt也使得攻击者必须使用字典+枚举的方式来破解,同样增加了破解的难度。


加盐是为了防止已有MD5查询网站或者程序直接破解密码。 比如你的密码是admin,MD5值是21232f297a57a5a743894a0e4a801fc3,但是如果你设置一个salt:!@#)(*$%&^,加密函数变为MD5(pass+salt),MD5值变为52cbc7b676eb498c96ac20e854f92f6f,那么那些破解网站或者程序就难以直接找出密码。 当然你的算法可以做得更加复杂,如MD5(MD5(salt+pass)+MD5(pass+salt)),即使有人通过注入等漏洞攻击,从数据库获得密码Hash,在不知道密码算法的情况下,他也难以进行密码的破解。

【热门文章】
【热门文章】