咱们知道,若是直接对密码进行散列,那么黑客能够对经过得到这个密码散列值,而后经过查散列值字典(例如MD5密码破解网站),获得某用户的密码。php
加Salt能够必定程度上解决这一问题。所谓加Salt方法,就是加点“佐料”。其基本想法是这样的:当用户首次提供密码时(一般是注册时),由系统自动往这个密码里撒一些“佐料”,而后再散列。而当用户登陆时,系统为用户提供的代码撒上一样的“佐料”,而后散列,再比较散列值,已肯定密码是否正确。程序员
这里的“佐料”被称做“Salt值”,这个值是由系统随机生成的,而且只有系统知道。这样,即使两个用户使用了同一个密码,因为系统为它们生成的salt值不一样,他们的散列值也是不一样的。即使黑客能够经过本身的密码和本身生成的散列值来找具备特定密码的用户,但这个概率过小了(密码和salt值都得和黑客使用的同样才行)。算法
下面以PHP示例,讲解md5($pass.$salt)加密函数。数据库
<?php
function hash($a) {
$salt=”Random_KUGBJVY”; //定义一个salt值,程序员规定下来的随机字符串
$b=$a.$salt; //把密码和salt链接
$b=md5($b); //执行MD5散列
return $b; //返回散列
}
?>windows
调用方式:$new_password=hash($_POST[password]); //这里接受表单提交值,并进行加密安全
下面详细介绍一下加Salt散列的过程。介绍以前先强调一点,前面说过,验证密码时要使用和最初散列密码时使用“相同的”佐料。因此Salt值是要存放在数据库里的。dom
用户注册时,函数
用户登陆时,测试
有时候,为了减轻开发压力,程序员会统一使用一个salt值(储存在某个地方),而不是每一个用户都生成私有的salt值。网站
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
您是否碰见过破解不了的MD5值?你是否碰见过‘奇形怪状’的hash?这些很是有可能就是带有salt(俗称加盐值),本文将为你们简单的介绍关于加盐值的一些信息。
0×01. 什么是加盐值?
为了增强MD5的安全性(自己是不可逆的),从而加入了新的算法部分即加盐值,加盐值是随机生成的一组字符串,能够包括随机的大小写字母、数字、字符,位数能够根据要求而不同,使用不一样的加盐值产生的最终密文是不同的。
0×02. 代码中如何使用加盐值?
因为使用加盐值之后的密码至关的安全,即使是你得到了其中的salt和最终密文,破解也是一个耗费至关多时间的过程,能够说是破解单纯MD5的好几倍,那么使用加盐值之后的密文是如何产生的呢?
1).首先咱们获得的是明文的hash值
2).进行计算获取MD5明文hash值
3).随机生成加盐值并插入
4).MD5插入加盐值获得的hash
5).获得最终的密文
0×03. 如何破解出带有加盐值的密文
由于像windows hash(未进行syskey加密)、非加盐值MD5等均可以经过大型的密码(如彩虹表)表进行对比解密,因此相对而言至关的轻松,而带有加盐值的密文就相对而言复杂的多,如今的MD5表大概是260+G,如何加盐值的可能性有10000个,那么密码表的应该是MD5 size*10000,就能够解密出原MD5表可以解密的密码了,一些网站也提供了对应的salt解密,可是测试之后效果并非很是好,如常规的admin888也未解密出,实在是遗憾,毕竟MD5本是不可逆的,带入随机值解密出最终密码的可能性就更低了,至少是相对大多数人而言的。
0×04. 含加盐值MD5算法的应用
目前多家的网站程序公司都已经加入了该算法,如常见的VBB论坛、discuz论坛等都采用了,甚至著名的Linux开源操做系统早已经加入了这种加密模式。可得而知,这种算法势必会在将来应用于更多的范围。
*0×05. 如何渗透带有加盐值的站点(实际案例)?这一段信息是来源于我近日实际渗透的片断,因为经过多种途径没法解密带有加盐值的密文,因此只能经过其余方式进行突破,本欲修改管理员密码来进行操做,但站点是经过多个网站对比密码的形式,如站A和站B,我若是修改站A的密码,一旦对比站A和站B,那么将会提示没法登录,由于我只拥有一个站的管理权限,那么这样就很是的麻烦了,一是密文没法破解,而是修改密码无效。那么咱们应该如何处理呢?这里简述下本人在这里应用的方法:1).修改admin uid为没有启用的某值2).将本身的注册用户修改成admin uid的值从新登录,并成功获取权限,由于在站A中式依据uid来分配权限的,也就是给某uid管理员权限,如何而言轻松获取到管理员权限。