CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  信息/网络安全

急!!!求一个解密算法

楼主x_gn(ASP>PHP>【JSP】>JAVA)2003-12-03 19:32:25 在 专题开发/技术/项目 / 信息/网络安全 提问

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

相关问题

  • 急!!谁有blowfish解密算法的原代码?
  • 寻求有关加密解密算法RC5的资料,急用!!!
  • 谁有asp.net的加密和解密算法啊,急!!!!
  • 请教解密算法!
  • 解密算法怎么写?
  • 求加密解密算法
  • 十万火急!!!求加密解密算法(网络传输时用的)
  • 谁有RSA加密及解密算法
  • 加密和解密:md5算法
  • 选用什么加解密算法?

关键词

  • 算法
  • 字符
  • 函数
  • 字符串
  • newcode
  • 可逆
  • 计算
  • 序列
  • enpas
  • codestr

得分解答快速导航

  • 帖主:x_gn
  • goldhawk_2000
  • haowh

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo