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值是要存放在数据库里的。

用户注冊时,

  1. 用户输入【账号】和【password】(以及其它用户信息);
  2. 系统为用户生成【Salt值】;
  3. 系统将【Salt值】和【用户password】连接到一起;
  4. 对连接后的值进行散列,得到【Hash值】;
  5. 将【Hash值1】和【Salt值】分别放到数据库中。

用户登录时,

  1. 用户输入【账号】和【password】;
  2. 系统通过username找到与之相应的【Hash值】和【Salt值】。
  3. 系统将【Salt值】和【用户输入的password】连接到一起。
  4. 对连接后的值进行散列。得到【Hash值2】(注意是即时运算出来的值);
  5. 比較【Hash值1】和【Hash值2】是否相等,相等则表示password正确,否则表示password错误。

有时候。为了减轻开发压力,程序猿会统一使用一个salt值(储存在某个地方),而不是每一个用户都生成私有的salt值。

从网上找了一段代码,參照一下
// 对password进行加盐后加密,加密后再通过Hibernate往数据库里存        String changedPswd=DigestUtils.md5Hex(name+pswd);

 

版权声明:本文博客原创文章。博客,未经同意,不得转载。

posted @ 2015-07-29 16:19  mengfanrong  阅读(1334)  评论(0编辑  收藏  举报