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

javascript高手,救命啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

楼主dreamsun(小扬)2004-12-03 22:20:39 在 Web 开发 / JavaScript 提问

碰到ü之类的特殊字符怎么解?我在网上看到别人用的代码可以解开一般的字母,但遇到特殊字符就不行了。怎么办?!!~~~  
  例如:  
  ü加密后是:  
  #@~^AQAAAA==üAAAAAA==^#~@  
  但就不能解密还原成ü  
   
   
   
  我在网上看到别人的解密函数,但不能解  
  function   toEncode(s,l)  
  {enc=new   ActiveXObject("Scripting.Encoder");  
  return   enc.EncodeScriptFile("."+l,s,0,l+"cript");  
  }  
   
   
  var   STATE_COPY_INPUT   =   100  
  var   STATE_READLEN   =   101  
  var   STATE_DECODE   =   102  
  var   STATE_UNESCAPE   =   103  
   
  var   pick_encoding   =   new   Array(  
  1,   2,   0,   1,   2,   0,   2,   0,   0,   2,   0,   2,   1,   0,   2,   0,  
  1,   0,   2,   0,   1,   1,   2,   0,   0,   2,   1,   0,   2,   0,   0,   2,  
  1,   1,   0,   2,   0,   2,   0,   1,   0,   1,   1,   2,   0,   1,   0,   2,  
  1,   0,   2,   0,   1,   1,   2,   0,   0,   1,   1,   2,   0,   1,   0,   2  
  )  
   
  var   rawData   =   new   Array(  
  0x64,0x37,0x69,   0x50,0x7E,0x2C,   0x22,0x5A,0x65,   0x4A,0x45,0x72,  
  0x61,0x3A,0x5B,   0x5E,0x79,0x66,   0x5D,0x59,0x75,   0x5B,0x27,0x4C,  
  0x42,0x76,0x45,   0x60,0x63,0x76,   0x23,0x62,0x2A,   0x65,0x4D,0x43,  
  0x5F,0x51,0x33,   0x7E,0x53,0x42,   0x4F,0x52,0x20,   0x52,0x20,0x63,  
  0x7A,0x26,0x4A,   0x21,0x54,0x5A,   0x46,0x71,0x38,   0x20,0x2B,0x79,  
  0x26,0x66,0x32,   0x63,0x2A,0x57,   0x2A,0x58,0x6C,   0x76,0x7F,0x2B,  
  0x47,0x7B,0x46,   0x25,0x30,0x52,   0x2C,0x31,0x4F,   0x29,0x6C,0x3D,  
  0x69,0x49,0x70,   0x3F,0x3F,0x3F,   0x27,0x78,0x7B,   0x3F,0x3F,0x3F,  
  0x67,0x5F,0x51,   0x3F,0x3F,0x3F,   0x62,0x29,0x7A,   0x41,0x24,0x7E,  
  0x5A,0x2F,0x3B,   0x66,0x39,0x47,   0x32,0x33,0x41,   0x73,0x6F,0x77,  
  0x4D,0x21,0x56,   0x43,0x75,0x5F,   0x71,0x28,0x26,   0x39,0x42,0x78,  
  0x7C,0x46,0x6E,   0x53,0x4A,0x64,   0x48,0x5C,0x74,   0x31,0x48,0x67,  
  0x72,0x36,0x7D,   0x6E,0x4B,0x68,   0x70,0x7D,0x35,   0x49,0x5D,0x22,  
  0x3F,0x6A,0x55,   0x4B,0x50,0x3A,   0x6A,0x69,0x60,   0x2E,0x23,0x6A,  
  0x7F,0x09,0x71,   0x28,0x70,0x6F,   0x35,0x65,0x49,   0x7D,0x74,0x5C,  
  0x24,0x2C,0x5D,   0x2D,0x77,0x27,   0x54,0x44,0x59,   0x37,0x3F,0x25,  
  0x7B,0x6D,0x7C,   0x3D,0x7C,0x23,   0x6C,0x43,0x6D,   0x34,0x38,0x28,  
  0x6D,0x5E,0x31,   0x4E,0x5B,0x39,   0x2B,0x6E,0x7F,   0x30,0x57,0x36,  
  0x6F,0x4C,0x54,   0x74,0x34,0x34,   0x6B,0x72,0x62,   0x4C,0x25,0x4E,  
  0x33,0x56,0x30,   0x56,0x73,0x5E,   0x3A,0x68,0x73,   0x78,0x55,0x09,  
  0x57,0x47,0x4B,   0x77,0x32,0x61,   0x3B,0x35,0x24,   0x44,0x2E,0x4D,  
  0x2F,0x64,0x6B,   0x59,0x4F,0x44,   0x45,0x3B,0x21,   0x5C,0x2D,0x37,  
  0x68,0x41,0x53,   0x36,0x61,0x58,   0x58,0x7A,0x48,   0x79,0x22,0x2E,  
  0x09,0x60,0x50,   0x75,0x6B,0x2D,   0x38,0x4E,0x29,   0x55,0x3D,0x3F  
  )  
   
  var   transformed   =   new   Array()  
  for   (var   i=0;   i<3;   i++)   transformed[i]   =   new   Array()  
  for   (var   i=31;   i<=126;   i++)   for   (var   j=0;   j<3;   j++)   transformed[j][rawData[(i-31)   *   3   +   j]]   =   (i==31)   ?   9   :   i  
   
  var   digits   =   new   Array()  
  for   (var   i=0;   i<26;   i++)  
  {  
  digits["A".charCodeAt(0)+i]   =   i  
  digits["a".charCodeAt(0)+i]   =   i+26  
  }  
  for   (var   i=0;   i<10;   i++)   digits["0".charCodeAt(0)+i]   =   i+52  
  digits[0x2b]   =   62  
  digits[0x2f]   =   63  
   
  function   unescape(char)  
  {  
  var   escapes   =   "#&!*$"  
  var   escaped   =   "\r\n<>@"  
   
  if   (char.charCodeAt(0)   >   126)   return   char  
  if   (escapes.indexOf(char)   !=   -1)   return   escaped.substr(escapes.indexOf(char),   1)  
  return   "?"  
  }  
   
  function   decodeBase64(string)  
  {  
  var   val   =   0  
  val   +=   (digits[string.substr(0,1).charCodeAt(0)]   <<   2)  
  val   +=   (digits[string.substr(1,1).charCodeAt(0)]   >>   4)  
  val   +=   (digits[string.substr(1,1).charCodeAt(0)]   &   0xf)   <<   12  
  val   +=   ((digits[string.substr(2,1).charCodeAt(0)]   >>   2)   <<   8)  
  val   +=   ((digits[string.substr(2,1).charCodeAt(0)]   &   0x3)   <<   22)  
  val   +=   (digits[string.substr(3,1).charCodeAt(0)]   <<   16)  
  return   val  
  }  
   
  function   tranEncode(encodingString)  
  {  
   
  var   marker   =   "#@~^"  
  var   stringIndex   =   0  
  var   scriptIndex   =   -1  
  var   unEncodingIndex   =   0  
  var   char   =   null  
  var   encodingLength   =   unEncodinglength   =   0  
  var   state   =   STATE_COPY_INPUT  
  var   unEncodingString   =   ""  
  var   re,   arr  
   
  while(state)  
  {  
  switch   (state)  
  {  
  case   (STATE_COPY_INPUT)   :  
  scriptIndex   =   encodingString.indexOf(marker,   stringIndex)  
  if   (scriptIndex   !=   -1)  
  {  
  unEncodingString   +=   encodingString.substring(stringIndex,   scriptIndex)  
  scriptIndex   +=   marker.length  
  state   =   STATE_READLEN  
  }  
  else  
  {  
  stringIndex   =   stringIndex==0   ?   0   :   stringIndex  
  unEncodingString   +=   encodingString.substr(stringIndex,   encodingString.length)  
  state   =   0  
  }  
  break  
   
  case   (STATE_READLEN)   :  
  encodingLength   =   encodingString.substr(scriptIndex,   6)  
  unEncodinglength   =   decodeBase64(encodingLength)  
  scriptIndex   +=   (6   +   "==".length)  
  state   =   STATE_DECODE  
  break  
   
  case   (STATE_DECODE)   :  
  if   (!unEncodinglength)  
  {  
  stringIndex   =   scriptIndex   +   "DQgAAA==^#~@".length  
  unEncodingIndex   =   0  
  state   =   STATE_COPY_INPUT  
  break  
  }  
  char   =   encodingString.substr(scriptIndex,   1)  
  if   (char   ==   "@")   state   =   STATE_UNESCAPE  
  else  
  {  
  if   (char.charCodeAt(0)   <   0xFF)  
  {  
  unEncodingString   +=   String.fromCharCode(transformed[pick_encoding[unEncodingIndex%64]][char.charCodeAt(0)])  
  unEncodingIndex++  
  }  
  else  
  {  
  unEncodingString   +=   char  
  }    
  scriptIndex++  
  unEncodinglength--  
  break  
  }  
   
  case   STATE_UNESCAPE:  
  unEncodingString   +=   unescape(encodingString.substr(++scriptIndex,   1))  
  scriptIndex++;   unEncodinglength   -=2  
  unEncodingIndex++  
  state   =   STATE_DECODE  
  break  
  }  
  }  
   
  re   =   new   RegExp("(JScript|VBscript).encode",   "gmi")  
  while(arr   =   re.exec(unEncodingString))   unEncodingString   =   RegExp.leftContext   +   RegExp.$1   +   RegExp.rightContext  
  return   unEncodingString  
  }  
  问题点数:0、回复次数:2Top

1 楼cuixiping(无心●愚公)回复于 2004-12-04 09:07:30 得分 0

怎么个不行?可以的啊。Top

2 楼flyskytoday(夜漫漫路漫漫)回复于 2004-12-04 10:00:52 得分 0

加密后地函数你必须完整地列出  
  要是变动一点点都会无法解密Top

相关问题

  • javascript
  • Javascript
  • javascript
  • JavaScript
  • javascript
  • Javascript
  • javascript
  • 求javascript!!
  • Calculations of Javascript
  • TC & Javascript

关键词

  • charcodeat
  • escapes
  • val
  • substr
  • state
  • var
  • char

得分解答快速导航

  • 帖主:dreamsun

相关链接

  • Web开发类图书

广告也精彩

反馈

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