[脑力劳动]经简单加密后的密码的破解

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

原帖:http://community.csdn.net/Expert/topic/3329/3329845.xml?temp=.6935236

开始就觉得要耗费不少时间,但是想到好久没作些锻炼脑力的东西了,索性来一下,呵呵

================================================================================

加密代码如下:

'加密密码开始

function encrypt(preString)

Dim texts

Dim seed

Dim i,length

prestring = trim(preString)

length = len(preString)

seed = length

Randomize(length)

texts = ""

for i = 1 to length

seed = int(94*rnd(-asc(mid(preString,i,1))-seed*asc(right(prestring,1)))+32)

texts = texts & chr(seed) & chr(int(94*rnd(-seed)+32))

next

dim dist

dist=""

for i = 1 to len(texts)

if mid(texts,i,1)<>"'" then

dist=dist+mid(texts,i,1)

end if

next

encrypt = dist

end function

'加密结束

这段程序是给用户输入的密码进行加密.此程序能否写出解密程序?应如何着手?

经过加密过后数据库显示密码的字符如下:

aaGB0x?69Pf这个密码前面有个空格,提问者没有说明,耗费些许时间================================================================================解决方法:看了两个小时,好象是可以逆出来的.不过估计要花更长时间,而且通用性不好.呵呵.主要入手点

rnd(负数的值)是固定的0~1,不会改变seed的值必定在32~126之间第一个这句话中的第二个seed等于上次循环结束后的seed.texts = texts & chr(seed) & chr(int(94*rnd(-seed)+32))通过匹配chr(seed) / chr(int(94*rnd(-seed)+32)) 可以判断出哪几个字符是否相邻因为可能会有单引号被过滤掉的情况.准备工作,Word文档,做成表格便于理解
从最后一位开始算,最后一位的mid(preString,i,1) = right(prestring,1)所以我们可以构造成一个简单的方程式
为了便于操作,用VB快速写个小工具进行验证,打开附件里的计算器进行运算.除了第一个因为试验的原因时间长外,后面的每个字符破一个一分钟不到的时间当然除了机器运算外,还要根据实际的经验来进行一些判断.
因为原来的加密函数中使用了Int来截取整数,所以重复性就很多我从后往前破,破到倒数第六个的时候,我发现有两个组合可能性比较大780103和780503,很象生日,就尝试在前面加了19,组合成19780103,加密后果然一致.然后进一步验证了9这个项是符合算法规则的,于是破解结束.从上面的组合中我们可以看到这个密码的原解最少有4*3*3*4*3=432个.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航