下面是笔者的思路:
对MD5密码进行截取保存及截取验证
一个简单的例子
A=”123456”
Response.write (md5(A))
得到的结果是:
16位:49ba59abbe56e057
32位:e10adc3949ba59abbe56e057f20f883e
如果直接这样保存进数据库。当网站存在注入。或者其他什么漏洞,导致这段密文被人知道,那么就可以查询或者爆破得到密码。
那么我们要做的是,将密码进行随机截取,比如我截取验证前面14位
| Rs(“password”)=left(md5(a),14) |
然后验证的使用使用
| If left(request.form(“a”) ,14)<>rs(“password”) then Response.write (“密码错误”) Else Response.write (“登陆成功”) End if |
想破解?破解去吧!后面差了2位的可能组合有多少,就不用我去算了吧?
或许你会问。这么以来后面也就是只要前面14位一样就可以成功了?那么不是同样加大了密码被暴力破解出来的可能性吗?因为只要满足前14位相同就可以登陆成功啊!也就是说加入后面2位带来的组合有1000种。那么就是说我只要破解出这1000种组合里的1个就能成功登陆了。如果只是这样做,虽然是密码复杂性加大,但是也导致密码更容易被破解,那么如何解决这个问题?
笔者思考了很久,终于有了头绪,那就是——让用户自定义截取的长度,及截取的位置、对加密长度再进行自定义组合。那么在网站没被攻陷之前,你是没有办法的得知密码的解密及截取组合方式的。想要按照上面说的按照列出可能的所有组合然后再进行爆破得到一个就得到权限,就不可能了。因为按照我上面的办法组合出来的密码的可能组合数是不可测的,全部列举出来都够建立一个MD5加密查询的数据库了。所以攻击者只能放弃对md5密码的猜解。那么及时我给你密文。给你后台地址。你也永远进不去。永远得不到权限了。

