请教:asp一段加密程序的问题?
加密代码如下:
'加密密码开始
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
'加密结束
这段程序是给用户输入的密码进行加密.此程序能否写出解密程序?应如何着手?谢谢.
问题点数:0、回复次数:5Top
1 楼bablue()回复于 2004-09-01 14:45:41 得分 0
经过加密过后数据库显示密码的字符如下:
aaGB0x?69Pf<A/Top
2 楼bablue()回复于 2004-09-01 15:16:10 得分 0
没人晓得?
Top
3 楼babyt(阿泰)回复于 2004-09-01 17:23:29 得分 0
看了两个小时,好象是可以逆出来的.不过估计要花更长时间,而且通用性不好.呵呵.
主要入手点
seed = int(94*rnd(-asc(mid(preString,i,1))-seed*asc(right(prestring,1)))+32)
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)) 可以判断出哪几个字符是否相邻
因为可能会有单引号被过滤掉的情况.
建议从最后一位开始算,最后一位的
mid(preString,i,1) = right(prestring,1)
如果没错的话,最后一位应该是3
Top
4 楼babyt(阿泰)回复于 2004-09-01 17:57:12 得分 0
19780103Top
5 楼babyt(阿泰)回复于 2004-09-01 18:01:35 得分 0
在解密过程中发现该算法是有问题的,刚才的这个密码至少有432组解.Top




