急!!!求一个解密算法
asp中加密字符串的函数为:
<%
Function EnPas(CodeStr)
Dim CodeLen
Dim CodeSpace
Dim NewCode
CodeLen = 30
CodeSpace = CodeLen - Len(CodeStr)
If Not CodeSpace < 1 Then
For cecr = 1 To CodeSpace
CodeStr = CodeStr & Chr(21)
Next
End If
NewCode = 1
Dim Been
For cecb = 1 To CodeLen
Been = CodeLen + Asc(Mid(CodeStr,cecb,1)) * cecb
NewCode = NewCode * Been
Next
CodeStr = NewCode
NewCode = Empty
For cec = 1 To Len(CodeStr)
NewCode = NewCode & CfsCode(Mid(CodeStr,cec,3))
Next
For cec = 20 To Len(NewCode) - 18 Step 2
EnPas = EnPas & Mid(NewCode,cec,1)
Next
End Function
Function CfsCode(Word)
For cc = 1 To Len(Word)
CfsCode = CfsCode & Asc(Mid(Word,cc,1))
Next
CfsCode = Hex(CfsCode)
End Function
%>
跪求此加密算法的解密函数,请大家帮帮忙了
问题点数:100、回复次数:12Top
1 楼goldhawk_2000(金鹰)回复于 2003-12-04 13:40:41 得分 0
建议把程序用文字描述一下可能会好点.
这个脚本偶看不懂. 不过很有兴趣探讨一下.
am_i_a_happy_sky@yahoo.com.cnTop
2 楼x_gn(ASP>PHP>【JSP】>JAVA)回复于 2003-12-04 16:54:13 得分 0
就是一段程序,慢慢看应该可以知道大概意思,中文我不大会描述啊Top
3 楼goldhawk_2000(金鹰)回复于 2003-12-05 10:16:01 得分 0
Function EnPas(CodeStr)
Dim CodeLen
Dim CodeSpace
Dim NewCode
CodeLen = 30 //说明加密的明文小于等于30字节
CodeSpace = CodeLen - Len(CodeStr)//计算(30-明文长度)差值
If Not CodeSpace < 1 Then
For cecr = 1 To CodeSpace
CodeStr = CodeStr & Chr(21) //如果明文长度不足30,则在模256下按位加上 差值*21
Next //(模256)这里是chr()之后用不用ANSI字码我不清楚
End If
NewCode = 1
Dim Been
For cecb = 1 To CodeLen //对newcode做30轮变换
//这里把明文 看作由对应ansi字码组成的整数序列,
//x1,x2,x3.... 计算一个结果,是一个连乘(xi+30)(i=1...30)
Been = CodeLen + Asc(Mid(CodeStr,cecb,1)) * cecb
NewCode = NewCode * Been
Next
CodeStr = NewCode //用以上计算结果覆盖明文,完成第一步变换
NewCode = Empty
For cec = 1 To Len(CodeStr) //????? 我看不懂了. 对asp这些函数不明白,数据类型的使用也乱了, 如果能翻译成c等其他数据类型明了的语言就好了.
NewCode = NewCode & CfsCode(Mid(CodeStr,cec,3))
Next
For cec = 20 To Len(NewCode) - 18 Step 2
EnPas = EnPas & Mid(NewCode,cec,1)
Next
End Function
Function CfsCode(Word) //这个函数的作用分析:把输入看作ansi码序列.
依次按为加起来.并且最终转化成16进制表示
For cc = 1 To Len(Word)
CfsCode = CfsCode & Asc(Mid(Word,cc,1))
Next
CfsCode = Hex(CfsCode)
End Function
%>
这个算法好像很鸟,暂时没有明白,以上一些简单的注释定有错误,全作参考.等有时间再好好研究.我估计这个算法每一步都可逆的,因为好像没有使用密钥,有的话就是那个21了 呵呵
Top
4 楼x_gn(ASP>PHP>【JSP】>JAVA)回复于 2003-12-05 14:34:48 得分 0
我想这个算法也是可逆的,但是怎么想也想不出来解法,还希望金鹰能抽个空帮帮我
附china字符串生成的密文是:CCA80E5A82B577B8B177DD87F0708A
Top
5 楼goldhawk_2000(金鹰)回复于 2003-12-05 16:45:58 得分 0
因为对ASP语法的错误理解 上面我说的差太多了.这可能是个散列函数,也就是不可逆的
CodeStr = CodeStr & Chr(21) 是把字符串补足30位,程序流程我是这样理解的:
第一步:根据得到的30位字符串的每个字符的asicII码如上计算一个中间值newcode
求和(xi*i +30)(i=1...30).
第二步:把newcode看作字符串假设是12344567890123456789,依次去3个数123,234,345,456,...每组在看作整数转换成16进制数,然后把16进制数看作字符串连接起来.
第三步:在得到的16进制字符串中从第20位到第(n-18)位,每隔一位取一个字符,并连接成密文字符串.
这样每次输入口令(可能是密码)的时候都计算其散列值,如果正确则通过认证
这样的加密不是可逆的,对应的明文也不是唯一的.因为这个算法比较简单,还是可以破解的
我认为可以这样,根据对空串的计算估计合理的n值,然后把生成密文的字符序列补全,未知的全添1
因为3位10进制数可以对应1,2,3位16进制数,这个可以随便把握,计算出第二步生成的newcode
根据newcode和它的生成方法,得到一个字符序列,可能包含了不可显示字符等,只要想办法把这个字符串提交给EnPas函数 就可以登陆了.
不知搂住以为如何?Top
6 楼x_gn(ASP>PHP>【JSP】>JAVA)回复于 2003-12-07 15:08:27 得分 0
抱歉,昨天有事一直都没有上论坛,其实我的目的是想获得被加密的字符串,如果真的是不可逆的,那有什么办法可以做呢?
还有,你说的估计空串的n值,补全字符序列,然后将生成的newcode再提交给enpas函数这一段我不是很清楚,能不能说的清楚一点?Top
7 楼goldhawk_2000(金鹰)回复于 2003-12-08 09:39:50 得分 90
可以用穷举破解呀,呵呵. 明文肯定是30位的,而且原来的明文后面肯定有一些箭头.
另外每个字符的取值范围是一定的,好像都大于21,对30个箭头的明文计算一下中间的n值,就是16进制数序列的长度.然后根据这个n值来扩充密文, 满足它的计算规则(?:这里的规律要找一下,我没有想清楚).补全了n位的16进制数,也就得到了中间的newcode值(一个大整数).
(newcode-30)/30就是第30个字符,一般应该是那个箭头(21),不是也没有关系,反正只要能计算出一个30位的字符序列就可以作为明文来用.Top
8 楼x_gn(ASP>PHP>【JSP】>JAVA)回复于 2003-12-08 13:41:46 得分 0
谢谢金鹰的指点,我回去好好想想,有点点头绪了
ps:我暂时不结贴,如果你有更好的想法或者源码,请指点Top
9 楼x_gn(ASP>PHP>【JSP】>JAVA)回复于 2003-12-09 09:21:12 得分 0
有谁知道啊,希望各位高手帮帮忙啊,我还是想不出来Top
10 楼haowh(一个人走在黑黑的夜)回复于 2003-12-09 13:50:15 得分 0
关键里面那几个鸟函数不是太明白,而且那几个变量定义也不是太清楚,如果能翻译成c 就好了Top
11 楼haowh(一个人走在黑黑的夜)回复于 2003-12-09 13:51:46 得分 10
不过我想一般用于登陆的算法都是散列的不可逆的。Top
12 楼x_gn(ASP>PHP>【JSP】>JAVA)回复于 2003-12-09 18:36:51 得分 0
真的没有办法了吗?
Top




