论文写作网论文写作网

论文写作网电话
论文写作网免费咨询电话
13021898016

其详细使用方法请参见网上一篇名为毕业论文《在C#中调用JavaScript等脚本的实现》的文章②

毕业论文库:计算机 时间:2016-10-11 点击:

  } 
  public object Eval(string expression, string codeBody) 
  { 
  msc.AddCode(codeBody); 
  return msc.Eval(expression); 
  } 
  public object Eval(ScriptLanguage language, string expression, string codeBody) 
  { 
  if (this.Language != language) this.Language = language; 
  return Eval(expression, codeBody); 
  } 
  public object Run(string mainFunctionName, object[] parameters, string codeBody) 
  { 
  this.msc.AddCode(codeBody); 
  return msc.Run(mainFunctionName, parameters); 
  } 
  public object Run(ScriptLanguage language, string mainFunctionName, object[] parameters, string codeBody) 
  { 
  if (this.Language != language) 
  this.Language = language; 
  return Run(mainFunctionName, parameters, codeBody); 
  } 
  public void Reset(){this.msc.Reset();} 
  public ScriptLanguage Language 
  { 
  get { return (ScriptLanguage)Enum.Parse(typeof(ScriptLanguage), this.msc.Language, false); } 
  set { this.msc.Language = value.ToString(); } 
  } 
  public int Timeout {get { return 0; }} 
  public bool AllowUI 
  { 
  get { return this.msc.AllowUI; } 
  set { this.msc.AllowUI = value; } 
  } 
  public bool UseSafeSubset 
  { 
  get { return this.msc.UseSafeSubset; } 
  set { this.msc.UseSafeSubset = true; } 
  } 
  private void OnError(){if (RunError != null) RunError();} 
  private void OnTimeout(){if (RunTimeout != null) RunTimeout();} 
  private void ScriptEngine_Error(){OnError();} 
  private void ScriptEngine_Timeout(){OnTimeout();} 
  } 
  } 
  2 新浪微博模仿登录进程 
  之所以选择以新浪微博为例做模仿登录示意,是因为新浪微博登录进程环节较多及加密环节更细。 
  新浪微博的模仿登录验证进程主要分为以下5步操纵: 
  (1)首先请求微博主页获取js文件以确定client版本及加密算法; 
  (2)接着带上加密后的账户请求prelogin.php页面获取servertime、nonce、pubkey、rsakv、pcid、showpin等信息,以便对暗码加密利用; 
  (3)再请求http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.11) 
  (4)获取“新浪通行证”生存Cookie; 
  (5)带上Cookie,请求新浪通行证中location.replace后头的http,获取用户主页相关信息,为后续会见做筹备 
  具体的模仿登录进程见图1所示: 
  3 实现模仿登录进程中的重要环节 
  首先模仿登录新浪微博主页http://weibo.com/,操作FireBug就能看到,如图2所示: 
  复制个中一个index.js相应正文,操作JavaScript名目化东西③,将名目化功效生存为文件sina.js,个中该js文件生存了整个登录进程、ssologin.js版本、加密算法等信息。在5421行即显示的是后头client这个参数的值“ssologin.js(v1.4.11)”,如图3所示。 
  在微博登录框中输入账户,一旦鼠标分开文本框就是自动发送一个HTTP请求,URL为:
  http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=dGVzdA%3D%3D&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.11)&_=1382411317984
  虽然,需要用到模仿登录的处所还会有许多许多,碰着的贫苦或狐疑也就会许多许多,个中各类差异账户和暗码的加密算法是个中之最。下面我们以“以其人之道”的计策,提出有效办理登录进程中加密进程的办理方案,制止利用差异语言登录时需要对差异的加密算法举办移植的烦恼。 
  新浪腾讯微博等其他应用登录验证时,城市至少对暗码或同时账户、验证码举办一次或多次加密,加密进程无一破例地都利用JavaScript来实现,在用其他语言如Java、C#模仿登录时,较为常见的步伐就是对JavaScript的加密算法举办移植。虽然这样会显得越发直接,但在实际进程中也会碰着一些狐疑,暂不说移植的难度,对付像新浪微博这种常常改换加密算法的应用来说,就得常常移植加密算法的狐疑。假如换一个思路,直接挪用相应的JavaScript加密算法,也许维护本钱就会低落许多。下面我们就凭据这种思路,对新浪微博用C#模仿登录举办实验。 
  1 筹备事情 
  筹备事情包罗软件筹备和相应的开拓语言相关常识的相识,首先说抓包软件的选取,也许在泛泛的WEB应用开拓中,利用较多的是FireBug,也是我们容易想到的网络HTTP请求阐明东西,只是在面临有的登录验证时利用了重定向①,个中有的HTTP请求在FireBug中瞬间就被从头刷新了。所以推向利用如Fiddler之类的网络调试东西,举办整个网页登录进程的抓包,以阐明整个登录进程。Fiddler请到官方网站下载。下面的阐明进程也是操作FireBug团结Fiddler来实现的。 
  尚有一个必需相识的常识就是用Java或C#直接挪用JavaScript函数,对付Java挪用JavaScript,在JDK1.6插手了对Script(JSR223)的支持,假如是利用Java实现模仿登录,请查询相关的资料,这里主要是先容C#直接挪用JavaScript函数。 
  操作微软提供的Windows Script Control,其Microsoft(R) Script Control 是向开拓人员提供简朴要领以利用措施剧本的ActiveX(R)控件,其下载网址: 
  http://www.microsoft.com/zh-cn/download/details.aspx?id=1154 
  下载安装后,其实主要是包罗msscript.ocx在内的4个文件。其具体利用要领请拜见网上一篇名为《在C#中挪用JavaScript等剧本的实现》的文章②,其网址为:http://www.weste.net/html/200404/20040429QBI094905.html,个中对MSScriptControl的利用及从头对AxScriptControl举办封装为ScriptEngine类都举办了具体的说明,后续的新浪微博模仿登录中的账户和暗码加密也是挪用相应的ScriptEngine类的要领。其封装ScriptEngine类如下: 
  using System; 
  using MSScriptControl; 
  using System.Text; 
  namespace WinFormsAppWeibo 
  { 
  public enum ScriptLanguage 
  { 
  JScript,VBscript,JavaScript 
  } 
  public delegate void RunErrorHandler(); 
  public delegate void RunTimeoutHandler(); 
  public class ScriptEngine 
  { 
  private ScriptControl msc; 
  public event RunErrorHandler RunError; 
  public event RunTimeoutHandler RunTimeout; 
  public ScriptEngine() 
  : this(ScriptLanguage.VBscript) 
  { } 
  public ScriptEngine(ScriptLanguage language) 
  { 
  this.msc = new ScriptControlClass(); 
  this.msc.UseSafeSubset = true; 
  this.msc.Language = language.ToString(); 
  ((DScriptControlSource_Event)this.msc).Error += new DScriptControlSource_ErrorEventHandler(ScriptEngine_Error); 
  ((DScriptControlSource_Event)this.msc).Timeout += new DScriptControlSource_TimeoutEventHandler(ScriptEngine_Timeout);
  如图4所示: 
  请求参数如图5所示: 
  个中su为账户“test”是用 sinaSSOEncoder.base64.encode 加密后的字符串,如图6: 
  请求返回功效为JSON数据名目: 
  sinaSSOController.preloginCallBack({"retcode":0,"servertime":1382411319,"pcid":"gz-4013138055558ead653a280f14c60f0b4fa2","nonce":"T1WU6E","pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","showpin":0,"exectime":6}) 
  请求的响应各参数的描写如下表所示: 
  retcode 0暗示乐成 
  pcid 验证码请求时传入的参数 
  servertime login.php登录需回传,及共同账户暗码加密 
  nonce login.php登录需回传,及共同账户暗码加密 
  pubkey 加密算法的公钥 
  rsakv 代表rsa加密算法 
  showpin 0暗示不需要验证码 
  showpin为1则登录需要验证码,这时就需要把pcid传入到验证码请求的参数中,请求验证码的URL为: 
  http://login.sina.com.cn/cgi/pin.php?r=98129622&s=0&p= gz-4013138055558ead653a280f14c60f0b4fa2 
  r为8位随机数,p即为上面的pcid值 
  首先输入错误的账户和暗码后,点击登录,以便确认提交HTTP请求的URL;只有这样才气在FireBug下看到请求的位置,其原因是乐成登录后,有一个302网页重定向,登录请求瞬间就跳过了。尚有一个步伐就是直接利用Fiddler举办抓包。下面的演示是在点击“登录”时才开始利用Fiddler举办抓包:请求的URL: 
  http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.11) 
  具体的POST参数见图中Body部门,如图7所示: 
  5 总结 
  对付像腾讯微博、QQ空间以及webqq等的模仿登录,首先操作Fiddler对网页登录进程举办一次完整抓包,个中一个请求是对h_login_11.js的,内里就包罗对帐号及暗码的加密算法,相应的js加密函数如下: 
  // 对帐号加密 
  function uin2hex(str) { 
  var maxLength = 16; 
  str = parseInt(str); 
  var hex = str.toString(16); 
  var len = hex.length; 
  for (var i = len; i < maxLength; i++) { 
  hex = "0" + hex 
  } 
  var arr = []; 
  for (var j = 0; j < maxLength; j += 2) { 
  arr.push("\\x" + hex.substr(j, 2)) 
  } 
  var result = arr.join(""); 
  eval('result="' + result + '"'); 
  return result 
  } 
  // 对暗码的加密 
  function getEncryption(password, uin, vcode) { 
  var str1 = hexchar2bin(md5(password)); 
  var str2 = md5(str1 + uin); 
  var str3 = md5(str2 + vcode.toUpperCase()); 
  return str3 
  } 
  在各类模仿登录中,对帐号和暗码的加密是主要重点办理的问题,不外,在实际操纵进程中,生存各个HTTP请求功效中的Cookie以及在HTTP请求头中配置好Referer、UserAgent和Cookie也是一些须要留意的细节。在每一次开始模仿登录操纵前,首先用抓包东西,对网页登录进程举办完整的相识,再实现模仿登录的进程就不是一件难事了。 
  参考文献: 
  [1]Baidu.重定向.百度百科,2013-06-10. 
  [2]秋枫.在C#中挪用JavaScript等剧本的实现.2004-04-29. 
  作者简介:鲜海(1974.12-),男,四川南部县人,开拓主办职务,工程系列中级,硕士研究生,研究偏向:现主要从事继承、网络教诲信息打点平台的开拓和研究,存眷于微博、微信的拓展应用开拓。 
  作者单元:西南财经大学继承(网络)教诲学院,成都 610074 
  注: 
  ①重定向又称之为302即临时性转移Temporarily Moved,英文名称302 redirect,也被认为是临时重定向temporary redirect 
  ②其作者:秋枫 宣布时间:2004-4-29 9:49:05 文章来历:CSDN 
  ③JavaScript在线名目化:http://tool.chinaz.com/Tools/JsFormat.aspx
上一篇:在我国中职计毕业论文范文 算机教育中
下一篇:由浏览器对硕士论文毕业此作处理

| 计算机推荐

更多
其详细使用方法请参见网上一篇名为毕业论文《在C#中调用JavaScript等脚本的实现》的文章②-计算机:其详细使用方法请参见网上一篇名为毕业论文《在C#中调用JavaScript等脚本的实现》的文章②文章链接:/lunwen/jisuanji/1708.html

| 论文创作推荐资讯

更多 毕业论文推荐资讯