SALT 加密
2015-07-29 16:19
183 查看
大家都知道,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);
眼下得知的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);
相关文章推荐
- 开源 Swift AutoLayout 框架 SnapKit 介绍
- 【主席树】 ZOJ 2112 Dynamic Rankings 区间第k小值
- OC学习----可变字符串
- Http协议中的各种长度限制总结
- ThinkPHP3.1.3使用phpExcel1.8.0实现数据从Excel表格导入mysql数据库
- HDU 5317(2015多校3)-RGCDQ(数论)
- 基于json-lib.jar包 创建JSONObject的四个常用方法
- Ubiquitous Religions(POJ--2524
- php图形图像处理基础
- 设计模式(4):模板方法模式
- Axis学习的第一天
- 基于注解的ssh框架之spring配置文件
- 两种JAVA实现短网址服务算法
- ACM/ICPC World Finals 2012 B Curvy Little Bottles
- ajax 验证用户名是否存在
- hdu1627 Krypton Factor(回溯法)
- android之WakeLock机制浅析
- 区别script中的type=”text/javascript”和language=”Javascript”
- CodeIgniter视图
- 大神们的blogs,沾沾光。