SALT 加密
大家都知道,MD5加密是不可逆。但事实上,我们通常值的MD5算法。黑客的眼下破解率相对较高。也有非常多站点上干脆就提供批量解密MD5的服务,当然是收费的。http://www.xmd5.org。这里提供一个网址供大家试试。
眼下得知的MD5的破解方式通常是採用保存大量 password与MD5解密后的值的相应关系,随着这样的解密库的数据量越来越庞大。MD5的破解率则会呈上升趋势,那怎样防止MD5或者一些其它加密手段的破解呢?
这里提到一个算法。叫做“salt”算法,也就是我们平时叫做“加盐”的一种算法,那它的原理是什么呢?就是将自己设定的password,加上一个程序猿设定的參数,进行组合后。再通过MD5等手段进行解密。这样,加密后的值黑客撞击的难度就大大增大了。
比方说,我设置的password是123456,这样的password即便被加密成MD5,被破解也是分分钟的事儿。那么我们能够将123456+邮箱名的后10位,这样就会变成123456aat@qq.com,再将这个字符串进行加密,就安全多了。
以下具体介绍一下加Salt散列的过程。
介绍之前先强调一点,前面说过,验证password时要使用和最初散列password时使用“同样的”佐料。所以Salt值是要存放在数据库里的。
用户注冊时,
- 用户输入【账号】和【password】(以及其它用户信息);
- 系统为用户生成【Salt值】;
- 系统将【Salt值】和【用户password】连接到一起;
- 对连接后的值进行散列,得到【Hash值】;
- 将【Hash值1】和【Salt值】分别放到数据库中。
用户登录时,
- 用户输入【账号】和【password】;
- 系统通过username找到与之相应的【Hash值】和【Salt值】。
- 系统将【Salt值】和【用户输入的password】连接到一起。
- 对连接后的值进行散列。得到【Hash值2】(注意是即时运算出来的值);
- 比較【Hash值1】和【Hash值2】是否相等,相等则表示password正确,否则表示password错误。
有时候。为了减轻开发压力,程序猿会统一使用一个salt值(储存在某个地方),而不是每一个用户都生成私有的salt值。
从网上找了一段代码,參照一下:
// 对password进行加盐后加密,加密后再通过Hibernate往数据库里存 String changedPswd=DigestUtils.md5Hex(name+pswd);
版权声明:本文博客原创文章。博客,未经同意,不得转载。